4
Очистка
Выполняется командой VACUUM
очищает ненужные версии строк в табличных страницах
(пропуская страницы, уже отмеченные в карте видимости)
очищает индексные записи, ссылающиеся на очищенные версии строк
обновляет карты видимости и свободного пространства
Обычно работает в автоматическом режиме
частота обработки зависит от интенсивности изменений в таблице
процессы autovacuum launcher и autovacuum worker
Как мы уже знаем, при реализации многоверсионности в таблицах
накапливаются исторические версии строк, а в индексах — ссылки
на такие исторические версии. Когда версия строки уходит за горизонт
базы данных, ее можно удалить, освобождая место для других версий.
Очистка, выполняемая командой VACUUM, обрабатывает всю таблицу,
включая все созданные на ней индексы. При этом удаляются и
ненужные версии строк, и указатели на них в начале страницы.
Обычно очистка запускается не вручную, а работает в автоматическом
режиме, учитывая фактическое количество изменений в таблице. Чем
активнее изменяются, добавляются и удаляются строки, тем чаще
автоочистка обрабатывает таблицу и ее индексы.
При включенной автоочистке в системе всегда присутствует процесс
autovacuum launcher, который занимается планированием работы
процессов autovacuum worker, непосредственно выполняющих очистку.
Несколько экземпляров таких рабочих процессов могут действовать
параллельно.
Важно, чтобы процесс автоочистки был правильно настроен. Как это
делается, рассматривается в курсе DBA2 «Администрирование
PostgreSQL. Настройка и мониторинг». Если автоочистка не будет
срабатывать вовремя, таблицы будут разрастаться в размерах. Также
важно, чтобы в системе с OLTP-нагрузкой не было длинных транзакций,
подолгу удерживающих горизонт базы данных и мешающих очистке.