Хранение метаданных временных объектов в памяти
Новая функциональность СУБД Pangolin позволяет не записывать метаданные о временных таблицах и индексах в pg_catalog. Для приложений, которые активно создают временные объекты, функциональность помогает избежать:
- раздувания системных каталогов;
- избыточной генерации WAL;
- нагрузки на синхронную репликацию;
- удержания длительных транзакций.
Вместо записи в каталог, вся информация о временных объектах хранится в памяти текущего бэкенд-процесса, без обращения к системным таблицам.
Настройка
Конфигурационные параметры
Для включения данной функциональности используются следующие параметры конфигурации:
Параметр | Описание | Значение по умолчанию | Контекст |
|---|---|---|---|
| При включении метаданные для временных таблиц и индексов сохраняются в памяти бэкенда, а не в |
|
|
| При включении временные объекты, метаданные которых находятся в памяти, искусственно подставляются в результаты запросов к системным каталогам (например, |
|
|
Оба параметра должны быть включены вручную, и функция работает только при включенном optimize_for_1c.
Внутренние детали и ограничения
Отслеживание зависимостей через общую память
Так как метаданные не попадают в pg_depend, необходимо отдельно обеспечивать целостность зависимостей:
- информация о зависимостях временных объектов сохраняется в общей памяти;
- это предотвращает ситуацию, когда перманентный объект (например, функция, используемая во временном функциональном индексе) удаляется другим бэкендом, не видящим этой зависимости.
Защита от переполнения OID (OID wraparound)
СУБД Pangolin определяет свободные OID при помощи сканирования pg_class. При отсутствии информации о временных объектах в pg_class может произойти повторное использование OID, что приведет к ошибкам.
log2_temp_objects_hash_partitions определяет число разделов в хеш-таблице для отслеживания OID временных объектов. Значение по умолчанию: 4 (16 разделов). Минимальное значение: 0 (1 раздел). Максимальное значение: 16 (65536 раздела).
Для предотвращения конфликтов OID:
- все OID, используемые временными объектами в бэкендах, отслеживаются в общей памяти;
- логика выделения новых OID учитывает эти значения и пропускает занятые OID.
Ограничения
Так как метаданные временных объектов хранятся в общей памяти, существуют ограничения на количество объектов и количество зависимостей:
Параметр | Описание | Значение по умолчанию | Минимальное значение | Максимальное значение |
|---|---|---|---|---|
| Определяет максимальное количество зависимостей временных объектов от постоянных объектов |
|
|
|
| Определяет максимальное количество временных объектов в системе |
|
|
|