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