mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Remove buffers_backend and buffers_backend_fsync from pg_stat_checkpointer
Two attributes related to checkpointer statistics are removed in this commit: - buffers_backend, that counts the number of buffers written directly by a backend. - buffers_backend_fsync, that counts the number of times a backend had to do fsync() by its own. These are actually not checkpointer properties but backend properties. Also, pg_stat_io provides a more accurate and equivalent report of these numbers, by tracking all the I/O stats related to backends, including writes and fsyncs, so storing them in pg_stat_checkpointer was redundant. Thanks also to Robert Haas and Amit Kapila for their input. Bump catalog version. Author: Bharath Rupireddy Reviewed-by: Bertrand Drouvot, Andres Freund Discussion: https://postgr.es/m/20230210004604.mcszbscsqs3bc5nx@awork3.anarazel.de
This commit is contained in:
@ -91,17 +91,11 @@
|
||||
* requesting backends since the last checkpoint start. The flags are
|
||||
* chosen so that OR'ing is the correct way to combine multiple requests.
|
||||
*
|
||||
* num_backend_writes is used to count the number of buffer writes performed
|
||||
* by user backend processes. This counter should be wide enough that it
|
||||
* can't overflow during a single processing cycle. num_backend_fsync
|
||||
* counts the subset of those writes that also had to do their own fsync,
|
||||
* because the checkpointer failed to absorb their request.
|
||||
*
|
||||
* The requests array holds fsync requests sent by backends and not yet
|
||||
* absorbed by the checkpointer.
|
||||
*
|
||||
* Unlike the checkpoint fields, num_backend_writes, num_backend_fsync, and
|
||||
* the requests fields are protected by CheckpointerCommLock.
|
||||
* Unlike the checkpoint fields, requests related fields are protected by
|
||||
* CheckpointerCommLock.
|
||||
*----------
|
||||
*/
|
||||
typedef struct
|
||||
@ -125,9 +119,6 @@ typedef struct
|
||||
ConditionVariable start_cv; /* signaled when ckpt_started advances */
|
||||
ConditionVariable done_cv; /* signaled when ckpt_done advances */
|
||||
|
||||
uint32 num_backend_writes; /* counts user backend buffer writes */
|
||||
uint32 num_backend_fsync; /* counts user backend fsync calls */
|
||||
|
||||
int num_requests; /* current # of requests */
|
||||
int max_requests; /* allocated array size */
|
||||
CheckpointerRequest requests[FLEXIBLE_ARRAY_MEMBER];
|
||||
@ -1095,10 +1086,6 @@ ForwardSyncRequest(const FileTag *ftag, SyncRequestType type)
|
||||
|
||||
LWLockAcquire(CheckpointerCommLock, LW_EXCLUSIVE);
|
||||
|
||||
/* Count all backend writes regardless of if they fit in the queue */
|
||||
if (!AmBackgroundWriterProcess())
|
||||
CheckpointerShmem->num_backend_writes++;
|
||||
|
||||
/*
|
||||
* If the checkpointer isn't running or the request queue is full, the
|
||||
* backend will have to perform its own fsync request. But before forcing
|
||||
@ -1108,12 +1095,6 @@ ForwardSyncRequest(const FileTag *ftag, SyncRequestType type)
|
||||
(CheckpointerShmem->num_requests >= CheckpointerShmem->max_requests &&
|
||||
!CompactCheckpointerRequestQueue()))
|
||||
{
|
||||
/*
|
||||
* Count the subset of writes where backends have to do their own
|
||||
* fsync
|
||||
*/
|
||||
if (!AmBackgroundWriterProcess())
|
||||
CheckpointerShmem->num_backend_fsync++;
|
||||
LWLockRelease(CheckpointerCommLock);
|
||||
return false;
|
||||
}
|
||||
@ -1270,15 +1251,6 @@ AbsorbSyncRequests(void)
|
||||
|
||||
LWLockAcquire(CheckpointerCommLock, LW_EXCLUSIVE);
|
||||
|
||||
/* Transfer stats counts into pending pgstats message */
|
||||
PendingCheckpointerStats.buf_written_backend
|
||||
+= CheckpointerShmem->num_backend_writes;
|
||||
PendingCheckpointerStats.buf_fsync_backend
|
||||
+= CheckpointerShmem->num_backend_fsync;
|
||||
|
||||
CheckpointerShmem->num_backend_writes = 0;
|
||||
CheckpointerShmem->num_backend_fsync = 0;
|
||||
|
||||
/*
|
||||
* We try to avoid holding the lock for a long time by copying the request
|
||||
* array, and processing the requests after releasing the lock.
|
||||
|
Reference in New Issue
Block a user