SQLLab
Глоссарий/VACUUM / AUTOVACUUM
PostgreSQLПродвинутый

VACUUM / AUTOVACUUM

Очищает «мёртвые» версии строк после UPDATE и DELETE. Необходим для корректной работы PostgreSQL.

Синтаксис
VACUUM table_name;
VACUUM ANALYZE table_name;
VACUUM FULL table_name;  -- осторожно! блокирует таблицу

Объяснение

PostgreSQL использует MVCC: UPDATE не удаляет старую строку, а создаёт новую версию. DELETE только помечает строку как удалённую. Физически они остаются — «мёртвые версии». VACUUM убирает мёртвые версии, освобождает место, обновляет статистику. AUTOVACUUM делает это автоматически. VACUUM ANALYZE — дополнительно обновляет статистику для оптимизатора.

Пример

-- Проверить таблицы с большим количеством мёртвых строк
SELECT relname, n_dead_tup, n_live_tup,
  last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;