Параметр 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.