Ответ
Оба механизма служат для очистки базы данных от "мёртвых" строк (tuples), которые остаются после операций DELETE и UPDATE из-за реализации механизма многоверсионности (MVCC) в PostgreSQL.
VACUUM
Это ручная команда для обслуживания таблиц. Она освобождает место, занятое мёртвыми строками, делая его доступным для новых данных. Также VACUUM может обновлять статистику для планировщика запросов (если вызвана с опцией ANALYZE).
- Особенности:
VACUUM: Не блокирует чтение и запись в таблицу, но не возвращает место операционной системе.VACUUM FULL: Блокирует таблицу, переписывает её в новый файл и возвращает место ОС. Используется редко из-за сильного влияния на производительность.
-- Очистка и сбор статистики для таблицы users
VACUUM ANALYZE users;AUTOVACUUM
Это автоматический фоновый процесс (демон), который периодически выполняет VACUUM и ANALYZE для таблиц, в которых произошло значительное количество изменений.
- Особенности:
- Работает автономно, предотвращая "раздувание" таблиц и поддерживая актуальность статистики.
- Его поведение гибко настраивается через
postgresql.confили параметры конкретной таблицы.
-- Пример настройки для таблицы: запускать autovacuum чаще
ALTER TABLE users SET (autovacuum_vacuum_scale_factor = 0.05); -- при изменении 5% строкКлючевые отличия
| Параметр | VACUUM | AUTOVACUUM |
|---|---|---|
| Запуск | Ручной, по команде администратора | Автоматический, фоновый процесс |
| Назначение | Точечное обслуживание, экстренная очистка | Регулярная профилактика и поддержка БД |
| Блокировки | Стандартный VACUUM не блокирует, VACUUM FULL блокирует | Никогда не использует блокирующие операции (FULL) |