Autovacuum – фоновый механизм PostgreSQL, который автоматически запускает очистку таблиц и обновление статистики планировщика. Он нужен из-за многоверсионной модели хранения: при изменении или удалении строки прежняя версия остается в файле таблицы и занимает место, пока не будет освобождена процедурой очистки.
Какие задачи решает autovacuum
- Освобождает место, занятое устаревшими версиями строк, для повторного использования.
- Обновляет статистику распределения данных, на которой планировщик строит планы запросов.
- Предотвращает исчерпание счетчика идентификаторов транзакций, при котором кластер вынужденно останавливает работу.
Как устроен
Фоновый процесс периодически просматривает базы и назначает обработку таблицам, в которых число измененных строк превысило порог. Порог складывается из фиксированной части autovacuum_vacuum_threshold и доли от размера таблицы autovacuum_vacuum_scale_factor. Проверить факт и время последнего прохода можно так:
SELECT relname, last_autovacuum, autovacuum_count FROM pg_stat_user_tables ORDER BY last_autovacuum;