Дамп и загрузка содержимого менеджера кэша дисковых блоков UMCA

Экземпляр QHB может работать достаточно долгое время. В процессе он накапливает данные о загруженных дисковых блоках. Если по каким-то причинам появится необходимость остановить его работу, то эти данные будут потеряны. В этом случае после запуска новому экземпляру придется заново собирать эти данные.

Модуль UMCA (Universal Memory Cache Analyzer, универсальный анализатор кэш-памяти) позволяет сохранять содержимое менеджера кэша дисковых блоков в файловой системе, а затем загружать его обратно, тем самым восстанавливая прежнее состояние. За счет этого время на прогрев экземпляра не затрачивается. (Подробное описание менеджера кэша дисковых блоков см. в разделе Менеджер кэша дисковых блоков TARQ)

ВНИМАНИЕ!
Функции UMCA работают, только если в конфигурационном файле qhb.conf параметр use_qhb_cache установлен в значение true, иначе вызовы функций будут завершаться ошибкой.



Создание дампа

Для создания дампов используется встроенная SQL-функция qhb_dump_disk_cache. Она копирует содержимое менеджера кэша дисковых блоков и затем сохраняет его в файле. В качестве результата возвращается количество сохраненных блоков. При вызове необходимо указать тип дампа (регистр символов не имеет значения). Ниже представлена соотносительная таблица всех типов дампов и затрагиваемых списков страниц.

Тип дампаЗатрагиваемые списки
FULLB1, B2, L1, L2
HOTL2
COLDL1
SHADOWB1, B2

Ниже приведен пример вызова функции qhb_dump_disk_cache, в результате которого создается полный дамп содержимого менеджера кэша дисковых блоков. Если ошибок нет, значит, функция выполнилась успешно.

SELECT qhb_dump_disk_cache('FULL');

Все дампы сохраняются в подкаталоге qhb-disk-cache-dump каталога базы данных. Файл имеет имя, состоящее из типа дампа (см. таблицу выше) и текущего UTC-времени.


Сохранение дампа в файл с произвольным именем

Функция qhb_dump_disk_cache имеет форму со вторым параметром, позволяющим дополнительно передать имя файла, под которым будет сохранен создаваемый дамп. Ниже приведен пример вызова функции qhb_dump_disk_cache, в результате которого будет создан дамп горячих блоков с именем test.dump.

SELECT qhb_dump_disk_cache('HOT','old.dump');


Загрузка дампа

Для загрузки из дампов используется встроенная SQL-функция qhb_load_disk_cache. Она загружает данные из предварительно созданного дампа. В качестве результата возвращается количество загруженных блоков. При вызове необходимо указать название или абсолютный путь к дампу. Ниже приведен пример вызова функции qhb_load_disk_cache, в результате выполнения которого будут загружены блоки. Если ошибок нет, значит, функция выполнилась успешно.

SELECT qhb_load_disk_cache('2020-12-03_12:50:21.dump');

В примере выше указано название дампа, поэтому функция будет искать его в стандартном подкаталоге хранения дампов менеджера кэша дисковых блоков. Также можно указать полный путь к дампу, как это сделано в примере ниже.

SELECT qhb_load_disk_cache('/opt/qhb-data/qhb-disk-cache-dumps/2020-12-03_12:50:21.dump');

Загрузка последнего дампа

Функция qhb_load_disk_cache имеет форму без параметров; в этом случае функция будет искать последний измененный файл, доступный для чтения. Ниже приведен пример вызова функции qhb_load_disk_cache без параметров.

SELECT qhb_load_disk_cache();

Если в каталоге есть несколько дампов, с помощью команды touch можно обновить время изменения дампа, тогда он будет считаться последним.

touch new-last.dump


Просмотр файлов дампа

Дистрибутив QHB содержит утилиту qhb_disk_cache_dump_viewer, которая позволяет посмотреть содержимое дампов менеджера кэша дисковых блоков. Ниже приведен пример использования этой утилиты.

qhb_disk_cache_dump_viewer 2020-12-03_15:34:53.dump

Сортировка вывода

Утилита qhb_disk_cache_dump_viewer имеет параметр сортировки вывода --sort-by (сокращенно -s). По умолчанию включена сортировка по номеру блока. С помощью значений, описанных в таблице ниже, можно указать, по какому столбцу сортировать вывод.

Значение параметра --sort-byОписание
ForkNumсортирует вывод по столбцу fork_num
BlockNumсортирует вывод по столбцу block_num
SpcNodeсортирует вывод по столбцу spc_node
DbNodeсортирует вывод по столбцу db_node
RelNodeсортирует вывод по столбцу rel_node

Ниже приведен пример вывода утилиты qhb_disk_cache_dump_viewer.

GEN      ID: [ fork_num | block_num | spc_node | db_node | rel_node ]
L1        1: [        0 |         0 |     1663 |   12674 |     2615 ]
L1        2: [        0 |         5 |     1663 |   12674 |     2617 ]
L1        3: [        0 |         1 |     1663 |   12674 |     2654 ]
L1      129: [        2 |         0 |     1663 |   12674 |     3456 ]
L1      130: [        0 |        42 |     1663 |   12674 |     2838 ]
L1      257: [        0 |         1 |     1663 |   12674 |     1259 ]
L1      258: [        0 |         2 |     1663 |   12674 |     2610 ]
L1      259: [        0 |         3 |     1663 |   12674 |     2696 ]

Получение размера дампа в блоках

Утилита qhb_disk_cache_dump_viewer имеет параметр отображения размера дампа в блоках --size (сокращенно -S). Этот параметр несовместим с параметром --sort-by.

Ниже приведен пример вывода qhb_disk_cache_dump_viewer с параметром --size.

B1: 0
B2: 0
L1: 159
L2: 0
Total: 159