Параметр HOLDMEM и дополнительные кэши дисковых блоков
- Значения HOLDMEM
- Таблицы, созданные с параметром HOLDMEM = POSSIBLY, предназначены дляхранения данных, к которым требуется быстрый доступ. Для них используетсяотдельный кэш LRU, за счет простоты которого достигается быстродействие приобращении к нему во время поиска страницы. Однако алгоритм LRU имеет меньшевозможностей настройки, чем TARQ, поэтому его использование нужно в особыхслучаях, например, при работе с данными, к которым требуется частое обращение.
Внимание!
В релизе QHB 1.4.0 эта функциональность является экспериментальной, её использование в инсталляциях на продуктивной среде не рекомендовано.
В QHB для ускорения работы с таблицами имеется возможность создавать их особым параметром HOLDMEM, который указывает, где они будут размещаться. Этот параметр может иметь три значения: OFF, POSSIBLY и ONLY.
Синтаксис:
CREATE TABLE cats (id int) WITH (HOLDMEM = OFF);
-- то же самое, что и CREATE TABLE cats (id int);
CREATE TABLE dogs (id int) WITH (HOLDMEM = POSSIBLY);
CREATE UNLOGGED TABLE cows (id int) WITH (HOLDMEM = ONLY);
Примечание
Обратите внимание, что таблицы с HOLDMEM = ONLY должны быть созданы с параметром UNLOGGED.
Значения HOLDMEM
-
OFF — это обычные таблицы. При создании таблицы этот параметр можно опустить. Обычно он нужен, когда требуется изменить свойство таблицы.
ALTER TABLE dogs SET (HOLDMEM = OFF);
-
POSSIBLY — это таблицы, которые по возможности находятся в памяти.
ALTER TABLE dogs SET (HOLDMEM = POSSIBLY);
-
ONLY — это таблицы, которые всегда находятся в памяти.
ALTER TABLE dogs SET (HOLDMEM = ONLY);
Примечание!
Все таблицы с параметромHOLDMEM = ONLY
должны бытьUNLOGGED
.
Отдельным запросом сделайте таблицуUNLOGGED
:ALTER TABLE dogs set UNLOGGED;
а затем
ALTER TABLE dogs SET (HOLDMEM = ONLY);
HOLDMEM = POSSIBLY
Таблицы, созданные с параметром HOLDMEM = POSSIBLY, предназначены для
хранения данных, к которым требуется быстрый доступ. Для них используется отдельный кэш LRU, за счет простоты которого достигается быстродействие при обращении к нему во время поиска страницы. Однако алгоритм LRU имеет меньше возможностей настройки, чем TARQ, поэтому его использование нужно в особых случаях, например, при работе с данными, к которым требуется частое обращение.
Примечание
Все таблицы с параметромHOLDMEM = ONLY
должны бытьUNLOGGED
.
Отдельным запросом сделайте таблицуUNLOGGED
:
ALTER TABLE dogs set UNLOGGED;
а затем
ALTER TABLE dogs SET (HOLDMEM = ONLY);
>>>>>> 0302912 (Update qhb_holdmem.md)
Для включения и управления алгоритмом вытеснения для таблиц, по возможности хранящихся в памяти, используются параметры в конфигурационном файле:
-
use_possible_buffer — логический параметр. При установке значения в TRUE будет использоваться этот кэш.
-
qhb_possible_buffers_size — общий размер буферного кэша.
-
shared_buffers_partition (используется общий параметр с TARQ) — размер фрагментов кеша (партиций; не имеют отношения к партициям таблицы); обращение к каждому фрагменту происходит независимо от остальных. Слишком большой размер партиций приведет к возрастанию конкуренции за блокировки, слишком маленький может привести к задержкам, если в партиции не окажется пригодных к вытеснению блоков (все «грязные» или занятые фоновым процессом). Рекомендуемое значение: 128.
HOLDMEM = ONLY
Таблицы, созданные с параметром HOLDMEM = ONLY, предназначены для хранения данных, к которым требуется максимально быстрый доступ.
Однако нужно знать некоторые особенности при работе с ним:
-
Так как все данные хранятся в памяти, переполнение этого буфера приведет к ошибке. Также при сбое или экстренном завершении данные не могут быть и не будут восстановлены.
-
Не поддерживается механизм TOAST.
а) При создании таблицы всем колонкам будет принудительно установлен режим хранения PLAIN.
б) У существующей таблицы нельзя изменить атрибут хранения на HOLDMEM = ONLY, если есть соответствующая TOAST таблица. Предварительно необходимо отключить TOAST с помощью команды
ALTER TABLE имя_таблицы ALTER COLUMN имя_столбца SET STORAGE PLAIN
. Обратите внимание, что при изменении режима хранения существующая таблица TOAST не будет удалена. На TOAST таблицу параметр HOLDMEM = ONLY не действует.в) При установке атрибута хранения HOLDMEM = POSSIBLY или HOLDMEM = OFF после HOLDMEM = ONLY автоматическое включение поддержки TOAST не производится. При возникновении потребности в такой поддержке ее необходимо включить вручную с помощью команды
ALTER TABLE имя_таблицы ALTER COLUMN имя_столбца SET STORAGE
.
Для включения и управления алгоритмом вытеснения для таблиц, по возможности хранящихся в памяти, используются параметры в конфигурационном файле:
-
use_qhb_onlymem_cache — логический параметр. При установке значения в TRUE будет использоваться этот кэш.
-
qhb_onlymem_cache_size — общий размер буферного кэша.
Совместимость
Параметр HOLDMEM, так же как и значения OFF, POSSIBLY и ONLY, реализованные в QHB, является расширением стандарта SQL.