Suivre la progression des opérations autovacuum/VACUUM en cours
PostgreSQLMaintenanceCommande
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;Ce que fait la commande
Affiche, pour chaque VACUUM en cours (worker autovacuum ou manuel), la table, la phase, le pourcentage du heap parcouru/nettoyé, le nombre de passes de vacuum d'index et l'événement d'attente ; ainsi que le nombre de workers autovacuum occupés.
Quand l'utiliser
Pour estimer quand un VACUUM sur une grande table se terminera, si tous les workers autovacuum sont occupés (tables en file d'attente), et si le vacuum attend à cause du bridage.
Attention
index_vacuum_count > 1 signifie que la liste des dead tuples ne tenait pas en mémoire et que les index ont été parcourus plusieurs fois ; augmentez maintenance_work_mem/autovacuum_work_mem (avant PG17, 1GB au maximum est utilisé pour cela). wait = Timeout:VacuumDelay correspond au bridage basé sur le coût (autovacuum_vacuum_cost_delay/cost_limit). Ne terminez pas un autovacuum dont le texte de requête indique 'to prevent wraparound' ; il redémarre immédiatement. VACUUM FULL et CLUSTER apparaissent dans pg_stat_progress_cluster, pas dans cette vue.
Voir aussi
- VACUUM ANALYZE d'une table donnée
- Exécuter un VACUUM FREEZE agressif
- Reconstruire un index sans verrouiller (REINDEX CONCURRENTLY)
- Régler autovacuum pour une table donnée
- Augmenter la cible de statistiques d'une colonne
- Mesurer le risque de wraparound des identifiants de transaction (âge XID par base et par table)