From 44fa6764a77e146707414f8245b097d0ee9d0596 Mon Sep 17 00:00:00 2001 From: Lakshmi N Date: Wed, 14 Oct 2026 15:47:05 +0000 Subject: [PATCH] xlogprefetcher: Log prefetch statistics at end of recovery Add XLogPrefetchLogStats(), which emits a LOG message summarising the prefetch counters (prefetch, hit, skip_init, skip_new, skip_fpw, skip_rep) accumulated during recovery. The function is called from PerformWalRecovery() immediately after the "redo done" message, giving operators visibility into how effective WAL prefetching was over the course of the recovery session. No-op when recovery_prefetch = off. --- src/backend/access/transam/xlogprefetcher.c | 18 ++++++++++++++++++ src/backend/access/transam/xlogrecovery.c | 3 +++ src/include/access/xlogprefetcher.h | 1 + 3 files changed, 22 insertions(+) diff --git a/src/backend/access/transam/xlogprefetcher.c b/src/backend/access/transam/xlogprefetcher.c index dff57642ab4..9f269e23134 100644 --- a/src/backend/access/transam/xlogprefetcher.c +++ b/src/backend/access/transam/xlogprefetcher.c @@ -337,6 +337,24 @@ XLogPrefetchResetStats(void) pg_atomic_write_u64(&SharedStats->skip_rep, 0); } +/* + * Log a summary of the prefetch counters at the end of recovery. + */ +void +XLogPrefetchLogStats(void) +{ + if (recovery_prefetch == RECOVERY_PREFETCH_OFF) + return; + + ereport(LOG, + errmsg("redo prefetch stats: prefetched %" PRIu64 " blocks, skipped (%" PRIu64 " in the buffer pool, %" PRIu64 " zero-initialized, %" PRIu64 " non-existent, %" PRIu64 " full page image, %" PRIu64 " recently prefetched)", + pg_atomic_read_u64(&SharedStats->prefetch), + pg_atomic_read_u64(&SharedStats->hit), + pg_atomic_read_u64(&SharedStats->skip_init), + pg_atomic_read_u64(&SharedStats->skip_new), + pg_atomic_read_u64(&SharedStats->skip_fpw), + pg_atomic_read_u64(&SharedStats->skip_rep))); +} /* * Called when any GUC is changed that affects prefetching. diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index 20be788da78..7240e2b85aa 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -1863,6 +1863,9 @@ PerformWalRecovery(void) errmsg("redo done at %X/%08X system usage: %s", LSN_FORMAT_ARGS(xlogreader->ReadRecPtr), pg_rusage_show(&ru0))); + + XLogPrefetchLogStats(); + xtime = GetLatestXTime(); if (xtime) ereport(LOG, diff --git a/src/include/access/xlogprefetcher.h b/src/include/access/xlogprefetcher.h index 56a81676d92..c532e3cfd25 100644 --- a/src/include/access/xlogprefetcher.h +++ b/src/include/access/xlogprefetcher.h @@ -34,6 +34,7 @@ typedef struct XLogPrefetcher XLogPrefetcher; extern void XLogPrefetchReconfigure(void); +extern void XLogPrefetchLogStats(void); extern void XLogPrefetchResetStats(void); extern XLogPrefetcher *XLogPrefetcherAllocate(XLogReaderState *reader); -- 2.43.0