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;
Связанные термины
Анекдоты по теме
— Что такое идемпотентность в контексте SQL? — Запрос, который можно выполнить несколько раз с тем же результатом. — Пример? — INSERT ... ON CONFLICT DO NOTHING. Первый раз вставляет, второй — ничего не делает. — А обычный INSERT? — Создаст дубликат или упадёт с ошибкой.
Разработчик открывает транзакцию в понедельник. Закрывает в пятницу. Таблица заблокирована всю неделю. В пятницу вечером приходит DBA с молотком.
— Чем отличается COMMIT от ROLLBACK? — COMMIT — это «я уверен». ROLLBACK — это «прости, я был неправ». — А SAVEPOINT? — Это «подожди, я ещё не уверен, но хочу запомнить этот момент».