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;

Анекдоты по теме

— Что такое two-phase commit? — Протокол для распределённых транзакций через несколько баз. — Фазы? — 1: все участники готовятся и говорят «готов». — 2: если все готовы — все фиксируют. Иначе — все откатывают. — Надёжно? — Да, но медленно. Один slow participant тормозит всех.

— Что такое CAP теорема? — Consistency, Availability, Partition tolerance — выбери два из трёх. — Это значит распределённые базы ненадёжны? — Нет. Partition tolerance обязательна. Реальный выбор: CP (PostgreSQL, MongoDB) или AP (Cassandra, CouchDB). — А PACELC? — Более реалистичная модель. Но это уже другая история.

— Что такое eventual consistency? — Данные станут согласованными «в конечном счёте». — Когда это приемлемо? — Лайки в соцсетях, счётчики просмотров — небольшая задержка не критична. — Когда неприемлемо? — Банковские переводы, инвентарь товаров. Там нужен ACID. — Один размер не подходит всем. — В этом вся суть NoSQL vs SQL дискуссии.