Мини-гайд: VACUUM в PostgreSQL — когда, зачем и как?

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
9,739
Реакции
1,556
Credits
34,581
Мини-гайд: VACUUM в PostgreSQL — когда, зачем и как?

PostgreSQL не удаляет строки сразу при DELETE или UPDATE. Вместо этого они помечаются как "мертвые", а данные продолжают занимать место. Со временем таблицы раздуваются, индексы тормозят, запросы тянут ресурсы.

VACUUM — инструмент для уборки "мусора" и поддержания БД в форме.

Варианты:
VACUUM — убирает мусор, но не возвращает место ОС.
VACUUM FULL — перезаписывает таблицу и реально освобождает диск (но блокирует таблицу!).
ANALYZE — обновляет статистику планировщика запросов.
VACUUM ANALYZE — два в одном: чистка + статистика.

Когда запускать вручную?
– Если autovacuum не справляется (часто видно по pg_stat_user_tables).
– После больших батчевых удалений/обновлений.
– Перед бэкапом (особенно VACUUM FULL для экономии места).

Пример:
SQL:
VACUUM VERBOSE my_table;
VACUUM FULL my_table;

Лайфхаки:
Не злоупотребляй FULL — он тяжёлый.
Настрой autovacuum под нагрузки: autovacuum_vacuum_threshold, autovacuum_vacuum_scale_factor и т.д. Следи за bloating: pgstattuple и pg_bloat_check.

VACUUM — не уборка по графику, а гигиена твоей БД. Запустишь вовремя — не будет проблем с производительностью.