Параметр HOLDMEM и дополнительные кэши дисковых блоков
Внимание!
В релизе QHB 1.5.1 эта функциональность является экспериментальной, её использование в установке на производственной среде не рекомендовано.
В 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);
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
.
Для включения и управления алгоритмом вытеснения для таблиц, по возможности хранящихся в памяти, используются параметры в файле конфигурации (подробную информацию см. в подразделе Включение и управление алгоритмом вытеснения параметра HOLDMEM).
Совместимость
Параметр HOLDMEM, так же как и значения OFF, POSSIBLY и ONLY, реализованные в QHB, является расширением стандарта SQL.