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
serialand 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-trivialpaths (truncation, freeze, cost delay, WAL full-page images, index page deletion), an isolation test for
recently_dead/missed_deadtuples, 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