aboutsummaryrefslogtreecommitdiff
path: root/src/backend/postmaster/checkpointer.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-07-18 15:40:31 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2012-07-18 15:40:31 -0400
commit80e373c3a8c43812bdc98fe0d433b9990acce5ad (patch)
tree558f7ba017b0c03cc6dc9dea45988ff3f109f2a4 /src/backend/postmaster/checkpointer.c
parent4a9c30a8a1d3a786abc4b8d95f0182463f66f919 (diff)
downloadpostgresql-80e373c3a8c43812bdc98fe0d433b9990acce5ad.tar.gz
postgresql-80e373c3a8c43812bdc98fe0d433b9990acce5ad.zip
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.)
Diffstat (limited to 'src/backend/postmaster/checkpointer.c')
-rw-r--r--src/backend/postmaster/checkpointer.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c
index b8715ea6762..a516856226f 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;
}