public inbox for [email protected]
help / color / mirror / Atom feedFrom: Lakshmi N <[email protected]>
To: [email protected]
Subject: log XLogPrefetch stats at end of recovery
Date: Wed, 18 Mar 2026 00:17:40 -0700
Message-ID: <CA+3i_M-+WVyrRcfnxa4gt+KQUzH-LTQ8D2JCGE_O0WzJJtZfUg@mail.gmail.com> (raw)
Hi,
While investigating a long recovery, I noticed that XLogPrefetch stats were
not logged at the end of recovery. This log message will be useful to
understand how effective XLogPrefetch was during recovery. Adding a patch
to address this.
Regards,
Lakshmi
Attachments:
[application/octet-stream] 0001-log-prefetch-stats-at-end-of-recovery.patch (3.0K, 3-0001-log-prefetch-stats-at-end-of-recovery.patch)
download | inline diff:
From da386a487764d9bca1373c25f7b673f90f57cdba Mon Sep 17 00:00:00 2001
From: Lakshmi N <[email protected]>
Date: Wed, 18 Mar 2026 00:00:51 -0700
Subject: [PATCH] log XLogPrefetch stats at end of recovery
Add XLogPrefetchLogStats(), which emits a LOG message summarizing 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
visibility into how effective WAL prefetching was over the
course of the recovery.
No-op when recovery_prefetch = off.
---
src/backend/access/transam/xlogprefetcher.c | 19 +++++++++++++++++++
src/backend/access/transam/xlogrecovery.c | 2 ++
src/include/access/xlogprefetcher.h | 2 ++
3 files changed, 23 insertions(+)
diff --git a/src/backend/access/transam/xlogprefetcher.c b/src/backend/access/transam/xlogprefetcher.c
index c235eca7c51..d9ebafe12f8 100644
--- a/src/backend/access/transam/xlogprefetcher.c
+++ b/src/backend/access/transam/xlogprefetcher.c
@@ -335,6 +335,25 @@ XLogPrefetchShmemInit(void)
}
}
+/*
+ * Log a summary of the XLogPrefetcher stats. Intended to be called
+ * at the end of recovery or when a standby is promoted.
+ */
+void
+XLogPrefetchLogStats(void)
+{
+ if (recovery_prefetch == RECOVERY_PREFETCH_OFF)
+ return;
+
+ elog(LOG, "XLogPrefetcher stats: prefetch=%lu, hit=%lu, skip_init=%lu, skip_new=%lu, skip_fpw=%lu, skip_rep=%lu",
+ 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 6d2c4a86b96..742cb90da9b 100644
--- a/src/backend/access/transam/xlogrecovery.c
+++ b/src/backend/access/transam/xlogrecovery.c
@@ -1845,6 +1845,8 @@ 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 7ec40c4b78b..a862924c895 100644
--- a/src/include/access/xlogprefetcher.h
+++ b/src/include/access/xlogprefetcher.h
@@ -37,6 +37,7 @@ extern void XLogPrefetchReconfigure(void);
extern size_t XLogPrefetchShmemSize(void);
extern void XLogPrefetchShmemInit(void);
+extern void XLogPrefetchLogStats(void);
extern void XLogPrefetchResetStats(void);
extern XLogPrefetcher *XLogPrefetcherAllocate(XLogReaderState *reader);
@@ -52,4 +53,5 @@ extern XLogRecord *XLogPrefetcherReadRecord(XLogPrefetcher *prefetcher,
extern void XLogPrefetcherComputeStats(XLogPrefetcher *prefetcher);
+
#endif
view thread (11+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: log XLogPrefetch stats at end of recovery
In-Reply-To: <CA+3i_M-+WVyrRcfnxa4gt+KQUzH-LTQ8D2JCGE_O0WzJJtZfUg@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox