24.2. Фоновая заморозка #
Когда устаревшие версии кортежей быстро накапливаются в таблицах баз данных и механизм автоматической очистки не справляется с нагрузкой, можно воспользоваться функциональностью Postgres Pro под названием фоновая заморозка. Это легковесный аналог автоочистки, который работает только с изменёнными и незаблокированными страницами данных постоянных таблиц, хранящихся в оперативной памяти. Фоновая заморозка быстро очищает страницы таблиц в оперативной памяти, что позволяет добавлять новые кортежи, замедляет увеличение таблиц и повышает эффективность автоочистки.
Примечание
Если механизм автоочистки справляется с нагрузкой, пользоваться фоновой заморозкой не нужно.
24.2.1. Обзор #
Postgres Pro запускает выделенный рабочий процесс фоновой заморозки. Все обслуживающие процессы взаимодействуют с этим рабочим процессом через UDP-сокет, отправляя ему информацию о недавно изменённых страницах и завершённых транзакциях. Эта информация накапливается в специальных списках, которые есть у каждой таблицы. Когда количество изменённых страниц в списке превышает пороговое значение, установленное параметром bgfreezer_pages_per_rel_to_clean, список помещается в очередь на очистку и заморозку. Рабочий процесс начинает обработку этой очереди после того, как получит уведомление о завершении транзакции. В процессе очистки списка страниц рабочий процесс получает блокировку на чтение соответствующей таблицы. Это позволяет предотвращать параллельные операции, такие как удаление или усечение таблиц, которые могут выполняться в процессе работы фоновой заморозки. Для каждой страницы в списке механизм фоновой заморозки очищает и замораживает кортежи, соответствующие определённым условиям. За дополнительной информацией обратитесь к Подразделу 24.1.6. Если после очистки и заморозки все кортежи страницы видимы и заморожены и соответствующая страница карты видимости находится в памяти, механизм фоновой заморозки устанавливает биты видимости и заморозки на странице карты видимости. После очистки удалённых кортежей на странице данных корректируются данные карты свободного пространства (FSM). Без такой корректировки очищенные страницы не будут повторно использоваться.
Механизм фоновой заморозки работает только со страницами постоянных таблиц, временные таблицы не затрагиваются.
Фоновая заморозка помогает решать проблемы, которые могут возникать при частом создании и удалении большого количества временных таблиц. В таких случаях механизм автоочистки может очищать системные таблицы недостаточно быстро, что приводит к их раздуванию. Фоновая заморозка в основном применима к каталогам pg_type
, pg_attribute
, pg_class
, pg_depend
и pg_index
. Она очищает удалённые кортежи в памяти, существенно уменьшая раздувание таблиц.
Чтобы включить фоновую заморозку, задайте значение on
для параметра конфигурации enable_background_freezer.