From 80e373c3a8c43812bdc98fe0d433b9990acce5ad Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 18 Jul 2012 15:40:31 -0400 Subject: [PATCH] Fix statistics breakage from bgwriter/checkpointer process split. ForwardFsyncRequest() supposed that it could only be called in regular backends, which used to be true; but since the splitup of bgwriter and checkpointer, it is also called in the bgwriter. We do not want to count such calls in pg_stat_bgwriter.buffers_backend statistics, so fix things so that they aren't. (It's worth noting here that this implies an alarmingly large increase in the expected amount of cross-process fsync request traffic, which may well mean that the process splitup was not such a hot idea.) --- src/backend/postmaster/checkpointer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index b8715ea676..a516856226 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -1132,7 +1132,8 @@ ForwardFsyncRequest(RelFileNode rnode, ForkNumber forknum, BlockNumber segno) LWLockAcquire(CheckpointerCommLock, LW_EXCLUSIVE); /* Count all backend writes regardless of if they fit in the queue */ - CheckpointerShmem->num_backend_writes++; + if (!AmBackgroundWriterProcess()) + CheckpointerShmem->num_backend_writes++; /* * If the checkpointer isn't running or the request queue is full, the @@ -1147,7 +1148,8 @@ ForwardFsyncRequest(RelFileNode rnode, ForkNumber forknum, BlockNumber segno) * Count the subset of writes where backends have to do their own * fsync */ - CheckpointerShmem->num_backend_fsync++; + if (!AmBackgroundWriterProcess()) + CheckpointerShmem->num_backend_fsync++; LWLockRelease(CheckpointerCommLock); return false; } -- 2.40.0