DBAtlas · Atlas d'exploitation des bases de données

Suivre la progression des opérations autovacuum/VACUUM en cours

PostgreSQLMaintenance

Commande

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.

Ouvrir dans DBAtlas →

Voir aussi