Мониторинг хода выполняющихся операций autovacuum/VACUUM
PostgreSQLОбслуживаниеКоманда
SELECT p.pid,
a.backend_type,
p.datname,
p.relid::regclass AS table_name,
p.phase,
pg_size_pretty(p.heap_blks_total * current_setting('block_size')::bigint) AS table_size,
round(100.0 * p.heap_blks_scanned / NULLIF(p.heap_blks_total, 0), 1) AS scanned_pct,
round(100.0 * p.heap_blks_vacuumed / NULLIF(p.heap_blks_total, 0), 1) AS vacuumed_pct,
p.index_vacuum_count,
now() - a.xact_start AS running_for,
a.wait_event_type || ':' || a.wait_event AS wait,
left(a.query, 80) AS query
FROM pg_stat_progress_vacuum p
JOIN pg_stat_activity a USING (pid)
ORDER BY running_for DESC;
-- Busy autovacuum workers / upper limit
SELECT count(*) FILTER (WHERE backend_type = 'autovacuum worker') AS av_workers_busy,
current_setting('autovacuum_max_workers') AS av_max_workers
FROM pg_stat_activity;Что делает
Для каждого выполняющегося VACUUM (рабочий процесс autovacuum или ручной) показывает таблицу, фазу, процент просканированной/очищенной heap, число проходов очистки индексов и wait event; а также число занятых рабочих процессов autovacuum.
Когда использовать
Чтобы оценить, когда завершится VACUUM на большой таблице, все ли рабочие процессы autovacuum заняты (таблицы ждут в очереди) и ждёт ли vacuum из-за throttling.
Внимание
index_vacuum_count > 1 означает, что список мёртвых кортежей не поместился в память и индексы сканировались несколько раз; увеличьте maintenance_work_mem/autovacuum_work_mem (до PG17 для этого используется максимум 1GB). wait = Timeout:VacuumDelay — это throttling на основе стоимости (autovacuum_vacuum_cost_delay/cost_limit). Не завершайте autovacuum, текст запроса которого содержит 'to prevent wraparound'; он сразу перезапустится. VACUUM FULL и CLUSTER отображаются в pg_stat_progress_cluster, а не в этом представлении.
Связанные материалы
- Выполнить VACUUM ANALYZE для конкретной таблицы
- Выполнить агрессивный VACUUM FREEZE
- Перестроить индекс без блокировки (REINDEX CONCURRENTLY)
- Настроить autovacuum для конкретной таблицы
- Увеличить statistics target столбца
- Измерить риск wraparound идентификаторов транзакций (возраст XID по базам данных и таблицам)