Autovacuum в PostgreSQL: наблюдаем прежде, чем менять настройки
С чего начать проверку autovacuum: мёртвые версии строк, длинные транзакции и различия VACUUM, ANALYZE и FULL.
- Версии строкСмотрим накопление мёртвых записей
- Работа autovacuumПроверяем запуски и актуальность статистики
- Долгие транзакцииИщем то, что мешает очистке
Таблицу часто обновляют, записей в ней столько же, а размер растёт. PostgreSQL хранит старые версии строк, пока они нужны другим транзакциям. Autovacuum помогает освобождать это место для повторного использования. Прежде чем менять его настройки, посмотрим, что происходит с таблицей и не мешают ли обслуживанию долгие транзакции.
Собираем исходные показатели
SELECT relname, n_live_tup, n_dead_tup,
last_autovacuum, last_autoanalyze,
autovacuum_count
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 10;Оценки числа строк не являются точным пересчётом таблицы. Снимайте показатели повторно и сравнивайте их с потоком обновлений. Один большой n_dead_tup не доказывает, что autovacuum отключён или неисправен. Важны размер таблицы, частота изменений и длительность обслуживания.
Разделяем две задачи
VACUUM помогает обслуживать версии строк, а ANALYZE обновляет статистику, необходимую планировщику. Обычный VACUUM в основном подготавливает место внутри файлов к повторному использованию. Он не обязан заметно уменьшать занимаемое место в файловой системе.
-- Для выбранной учебной таблицы:
VACUUM (VERBOSE, ANALYZE) public.orders;Такую команду следует выполнять с пониманием нагрузки и прав доступа. Наличие ручного запуска не отменяет autovacuum. Перед настройкой порогов проверьте долгоживущие транзакции: они могут удерживать видимость старых версий и мешать ожидаемому освобождению пространства.
Когда не стоит выбирать FULL
VACUUM FULL переписывает таблицу, требует дополнительного места и сильной блокировки. Это отдельная обслуживающая операция с планом простоя, а не универсальная кнопка очистки. Если таблица стабильно переиспользует ранее выделенное пространство, уменьшение файла может вообще не быть полезной целью.
Сравнивайте показатели одной таблицы за похожие интервалы: сколько строк меняется, когда работает autovacuum, нет ли длинных транзакций и как выглядят планы запросов. Если решили менять настройку, меняйте одну за раз. Тогда будет понятно, от какой правки появился эффект.
