VACUUM — это утилита в PostgreSQL, которая выполняет очистку "мертвых" кортежей (строк), оставшихся после операций UPDATE и DELETE.
Когда в PostgreSQL происходит UPDATE или DELETE, старая версия строки не удаляется физически сразу же. Вместо этого она помечается как "мертвая". Это связано с реализацией многоверсионного контроля конкурентности (MVCC), позволяющего разным сессиям видеть разные версии данных.
Мертвые кортежи занимают место на диске и могут снижать производительность запросов, поскольку при сканировании таблиц приходится обрабатывать больше данных.
VACUUM выполняет следующие действия:
xid wraps) при использовании VACUUM FREEZE.Существуют два основных типа VACUUM:
VACUUM (оптимистичный): Освобождает место, которое затем может быть повторно использовано внутри того же файла данных. Он не сокращает размер файла данных таблицы на диске.
sql
VACUUM FULL (пессимистичный): Перезаписывает всю таблицу в новый файл, полностью удаляя мертвые кортежи. Это освобождает место на диске и может уменьшить размер файла данных. Однако VACUUM FULL требует эксклюзивной блокировки таблицы, что означает, что другие операции с таблицей (чтение/запись) будут заблокированы на время выполнения команды. Это делает его менее подходящим для частого использования на работающих системах.
sql
Для большинства систем рекомендуется использовать VACUUM или VACUUM ANALYZE регулярно (часто автоматизированно с помощью автовакуума), а VACUUM FULL использовать только в исключительных случаях, когда необходимо гарантированно освободить дисковое пространство и допустима блокировка таблицы.
Режим автовакуума (autovacuum) в PostgreSQL по умолчанию включен и автоматически запускает процессы VACUUM и ANALYZE для таблиц, активность в которых превышает определенные пороги. Это значительно упрощает управление очисткой и статистикой.