Re: Vacuum statistics
Alexander Korotkov <aekorotkov@gmail.com>
From: Alexander Korotkov <aekorotkov@gmail.com>
To: Alena Rybakina <lena.ribackina@yandex.ru>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>,
Masahiko Sawada <sawada.mshk@gmail.com>, Amit Kapila <amit.kapila16@gmail.com>, Jim Nasby <jnasby@upgrade.com>, Bertrand Drouvot <bertranddrouvot.pg@gmail.com>,
Kirill Reshke <reshkekirill@gmail.com>, Melanie Plageman <melanieplageman@gmail.com>,
jian he <jian.universality@gmail.com>, Sami Imseih <samimseih@gmail.com>, vignesh C <vignesh21@gmail.com>, Ilia Evdokimov <ilya.evdokimov@tantorlabs.com>,
Andrey Borodin <x4mmm@yandex-team.ru>, Andrei Zubkov <zubkov@moonset.ru>, Andrei Lepikhov <lepihov@gmail.com>
Date: 2026-06-16T17:30:26Z
Lists: pgsql-hackers
Hi, Alena! On Tue, Jun 16, 2026 at 6:10 PM Alena Rybakina <lena.ribackina@yandex.ru> wrote: > Attached is a reworked version of the patch set. The main change is that the > statistics are no longer exposed through a contrib extension; they are now > built-in system views - pg_stat_vacuum_tables, pg_stat_vacuum_indexes and > pg_stat_vacuum_database - backed by pg_stat_get_vacuum_*() functions and stored > in the cumulative statistics system under a dedicated stats kind > (PGSTAT_KIND_VACUUM_RELATION). Collection is controlled by a single > track_vacuum_statistics GUC; the per-relation tracking list, the reset > function and the shared-memory-size helper from the extension version are gone. > > The series is also split into smaller, self-contained commits - one per metric > category (core heap/tuple counters, missed dead tuples/pages, visibility-map > transitions, the buffer/WAL/timing sampling machinery, per-relation buffers, > timing and the wraparound failsafe, and WAL) - with the documentation and > tests growing inside each commit. > > Other changes: > > index statistics are accumulated across the bulkdelete and cleanup passes and reported once per index, in both the serial and parallel paths; > index_vacuum_count is no longer exposed; > the regression coverage is now an in-core vacuum_stats test with deterministic checks and dedicated scenarios for the non-trivial paths (truncation, freeze, cost delay, WAL full-page images, index page deletion), an isolation test for recently_dead/missed_dead tuples, and a xid_wraparound TAP test for the failsafe counter. Thank you for the updated patchset. Some notes about it. 1) PgStat_CommonCounts.interrupts_count is never incremented. 2) LVRelState.wraparound_failsafe_count can only be incremented once in lazy_check_wraparound_failsafe(). Should we replace it with a bool? 3) Vacuum statistics isn't counted correctly for parallel index vacuum. parallel_vacuum_process_one_index() doesn't call neither extvac_stats_start_idx(), extvac_stats_end_idx(), or extvac_accumulate_idx_repor(). This leads all index vacuum stats to go the heap stats. I also think you need a reliable test cases to cover issues like this. 4) It seems that pgstat_vacuum_db_flush_cb() and pgstat_vacuum_relation_flush_cb() are unused as pgstat_report_vacuum_extstats() reports directly to shmem. What was your intention here? 5) Commit message of 0001 uses stale names rev_all_visible_pages/rev_all_frozen_pages counters for visible_page_marks_cleared` / `frozen_page_marks_cleared. ------ Regards, Alexander Korotkov Supabase
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add relallfrozen to pg_class
- 99f8f3fbbc8f 18.0 cited
-
Move wal_buffers_full from PgStat_PendingWalStats to WalUsage
- eaf502747bac 18.0 cited