Ответ
VACUUM в PostgreSQL — это служебная команда для "сборки мусора".
Из-за архитектуры MVCC (Multi-Version Concurrency Control), при операциях UPDATE
и DELETE
старые версии строк не удаляются физически, а лишь помечаются как «мертвые» (dead tuples). VACUUM
освобождает место, занятое этими строками, для повторного использования внутри таблицы.
Основные виды и их отличия:
VACUUM
— стандартная очистка. Не блокирует чтение/запись таблицы. Не возвращает место операционной системе, а делает его доступным для новых строк внутри таблицы.VACUUM FULL
— полная очистка. Блокирует таблицу полностью (exclusive lock), физически перезаписывая её без «мертвых» строк и возвращая избыточное место операционной системе. Используется редко и с осторожностью.VACUUM ANALYZE
— частый и рекомендуемый вариант. ВыполняетVACUUM
и затемANALYZE
. КомандаANALYZE
собирает статистику о распределении данных в таблице, которая необходима планировщику запросов для построения эффективных планов выполнения.
Автовакуум:
По умолчанию в PostgreSQL включен процесс автовакуума, который автоматически выполняет VACUUM
и ANALYZE
при достижении определенного порога измененных или удаленных строк. Ручной запуск требуется в исключительных случаях, например, после массовых операций UPDATE
или DELETE
.