Таблицы «в памяти»

Таблица «в памяти» (in-memory таблица) – это таблица, данные и метаданные которой полностью хранятся в оперативной памяти ядра СУБД ЛИНТЕР в течение всего сеанса работы с этой таблицей и не синхронизируются автоматически с ее данными и метаданными, хранящимися в файлах на диске.

Использование таблиц «в памяти» позволяет улучшить быстродействие СУБД как при выполнении операций манипулирования данными (добавление, обновление, удаление, быстрая загрузка данных), так и отчасти при обработке SELECT-запросов. Средствами улучшения быстродействия СУБД при использовании таблиц «в памяти» являются:

  • блокировка элементов системных очередей и страниц в пуле ядра СУБД, что уменьшает накладные расходы на поиск элементов в очередях и пуле и повторное считывание их с диска;

  • отказ от журнализации большинства изменений таблиц «в памяти» при выполнении над ними операций манипулирования данными.

Это означает, что обычный транзакционный механизм обработки данных на таблицы «в памяти» не распространяется, т.е. команды COMMIT и ROLLBACK для этих таблиц не применяются, вместо них для подтверждения внесенных изменений следует выполнять операцию SAVE, а для отмены операцию RESTORE. Однако, если при работе с таблицей «в памяти» происходит ошибка, делающая невозможным ее последующее сохранение, то выполняется неявная операция RESTORE и выдается соответствующее сообщение на консоль ядра СУБД и в файл протоколирования работы ядра СУБД linter.out.

Для таблиц «в памяти» существуют три стандартные процедуры, которые выполняет над ними СУБД ЛИНТЕР – активизация, сохранение и сброс, и два флага состояния – активизирована ли таблица в текущий момент и была ли она сохранена на диске.

Чтобы начать работу с таблицами «в памяти» необходимо не забыть выполнить ряд настроек:

  1. до начала работы сконфигурировать БД с помощью утилиты gendb (до запуска ядра на БД):

    • задать размер очереди для таблиц «в памяти» (команда вида SET IN-MEMORY TABLES 50;);

    • задать количество столбцов у таблиц «в памяти» (команда вида SET IN-MEMORY COLUMNS 250;);

    • задать количество файлов (команда вида SET IN-MEMORY FILES 50;);

  2. запуск ядра производить с ключом /INMEMPOOL (ключ вида /INMEMPOOL=100000, где значение задается в страницах по 4 Кбайт).

Для того чтобы выполнить любое обращение к таблице «в памяти», необходимо её сначала активизировать – загрузить с диска в оперативную память СУБД и заблокировать там. Если активизация по какой-то причине не удается, то дальнейшая работа с такой таблицей «в памяти» либо запрещается, либо выполняется как с обычной базовой таблицей.

Таблица «в памяти» может быть сохранена на диск. Если таблица «в памяти» была сохранена на диске, то у нее существуют файлы, и при ее активизации в пул страниц ядра СУБД считывается именно содержимое этих файлов. Сохранены должны быть обязательно все файлы таблицы, а не часть их. Если таблица «в памяти» не была сохранена на диске, то для СУБД ее файлы не существуют на диске – являются фиктивными, как файлы временных таблиц.

Для автоматической загрузки и сохранения данных таблиц «в памяти» можно воспользоваться опциями AUTOLOAD и AUTOSAVE для таблиц «в памяти».

Для таблиц «в памяти» есть ограничения функциональности, например, нельзя использовать ссылочную целостность и триггеры.