VACUUM / AUTOVACUUM
Очищает «мёртвые» версии строк после UPDATE и DELETE. Необходим для корректной работы PostgreSQL.
VACUUM table_name; VACUUM ANALYZE table_name; VACUUM FULL table_name; -- осторожно! блокирует таблицу
Объяснение
Пример
-- Проверить таблицы с большим количеством мёртвых строк SELECT relname, n_dead_tup, n_live_tup, last_autovacuum FROM pg_stat_user_tables ORDER BY n_dead_tup DESC;
Связанные термины
Анекдоты по теме
— Что такое «фантомное чтение»? — Запускаешь SELECT дважды в транзакции, второй раз видишь новые строки. — Почему? — Другая транзакция вставила и закоммитила строки между двумя твоими SELECT. — Как избежать? — REPEATABLE READ или SERIALIZABLE.
— Чем TRUNCATE отличается от DELETE? — DELETE логирует каждую строку и может быть в транзакции. — TRUNCATE удаляет всё разом, не логируя строки. Быстрее. — Но TRUNCATE нельзя откатить? — В PostgreSQL можно — TRUNCATE транзакционный. — В MySQL? — Там TRUNCATE автоматически фиксирует транзакцию. Осторожно.
MERGE (апдейт + инсерт) говорит таблице: — Я сейчас либо обновлю тебя, либо вставлю, смотря как повезёт. Таблица: — А если ты не попадаешь в условие? MERGE: — Тогда я просто упаду с ошибкой. Но ты же не захочешь меня откатывать? Это же долго.