Параметр HOLDMEM
и дополнительные кэши дисковых блоков
Внимание! Эта функциональность QHB является экспериментальной, её использование в инсталляциях на продуктивной среде не рекомендовано.
В 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 UNLOGGED, SET (HOLDMEM = ONLY);
Примечание Все таблицы с параметром
HOLDMEM = ONLY
должны бытьUNLOGGED
.
HOLDMEM = POSSIBLY
Таблицы, созданные с параметром HOLDMEM = POSSIBLY
, предназначены для хранения данных, к которым требуется быстрый доступ. Для них используется отдельный LRU cache, за счёт простоты которого достигается быстродействие при обращении к нему во время поиска страницы. Однако данный кэш менее качественный, чем TARQ, поэтому его использование нужно в особых случаях: при работе с данными, к которым требуется частое обращение.
Для включения и управления алгоритмом вытеснения для таблиц, по возможности хранящихся в памяти, используются параметры в конфигурационном файле:
-
use_possible_buffer — логический параметр. При установке значения в TRUE будет использоваться этот кэш.
-
qhb_possible_buffers_size — общий размер буферного кэша.
-
shared_buffers_partition (используется общий параметр с TARQ) — размер фрагментов кеша (партиций; не имеют отношения к партициям таблицы), обращение к каждому фрагменту происходит независимо от остальных, слишком большой размер приведёт к возрастанию конкуренции за блокировки, слишком маленький может привести к задержкам, если в партиции не окажется пригодных к вытеснению блоков (все «грязные» или занятые фоновым процессом).
Рекомендуемое значение:128
.
HOLDMEM = ONLY
Таблицы, созданные с параметром HOLDMEM = ONLY
, предназначены для хранения данных, к которым требуется максимально быстрый доступ.
Однако нужно знать некоторые особенности при работе с ним. Так как все данные хранятся в памяти, переполнение этого буфера приведёт к ошибке. Также при сбое или экстренном завершении данные не могут быть и не будут восстановлены.
Для включения и управления алгоритмом вытеснения для таблиц, по возможности хранящихся в памяти, используются параметры в конфигурационном файле:
-
use_qhb_onlymem_cache — логический параметр. При установке значения в TRUE будет использоваться этот кэш.
-
qhb_onlymem_cache_size — общий размер буферного кэша.
Совместимость
Параметр HOLDMEM
, так же как и значения OFF
, POSSIBLY
и ONLY
, реализованные в QHB, является расширением стандарта SQL.