Ответ
Оба механизма служат для очистки базы данных от "мёртвых" строк (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 ) |