diff options
author | Magnus Hagander <magnus@hagander.net> | 2007-03-30 18:34:56 +0000 |
---|---|---|
committer | Magnus Hagander <magnus@hagander.net> | 2007-03-30 18:34:56 +0000 |
commit | 335feca441b338f796e205f0e227b2f3a43f130e (patch) | |
tree | 9b11d242f2d60e4e38c87cb74946f04889de49bf /src/backend/storage/buffer/bufmgr.c | |
parent | f9ce21f94cd90ffa5e6c63c91e8b05aa0b6d2b25 (diff) | |
download | postgresql-335feca441b338f796e205f0e227b2f3a43f130e.tar.gz postgresql-335feca441b338f796e205f0e227b2f3a43f130e.zip |
Add some instrumentation to the bgwriter, through the stats collector.
New view pg_stat_bgwriter, and the functions required to build it.
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
-rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 867699b045a..8ce7700c9cb 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.215 2007/02/01 19:10:27 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.216 2007/03/30 18:34:55 mha Exp $ * *------------------------------------------------------------------------- */ @@ -80,6 +80,12 @@ static bool IsForInput; /* local state for LockBufferForCleanup */ static volatile BufferDesc *PinCountWaitBuf = NULL; +/* + * Global statistics for the bgwriter. The contents of this variable + * only makes sense in the bgwriter process. + */ +extern PgStat_MsgBgWriter BgWriterStats; + static bool PinBuffer(volatile BufferDesc *buf); static void PinBuffer_Locked(volatile BufferDesc *buf); @@ -964,6 +970,8 @@ BufferSync(void) { if (SyncOneBuffer(buf_id, false)) { + BgWriterStats.m_buf_written_checkpoints++; + /* * If in bgwriter, absorb pending fsync requests after each * WRITES_PER_ABSORB write operations, to prevent overflow of the @@ -1027,9 +1035,13 @@ BgBufferSync(void) if (SyncOneBuffer(buf_id1, false)) { if (++num_written >= bgwriter_all_maxpages) + { + BgWriterStats.m_maxwritten_all++; break; + } } } + BgWriterStats.m_buf_written_all += num_written; } /* @@ -1048,11 +1060,15 @@ BgBufferSync(void) if (SyncOneBuffer(buf_id2, true)) { if (++num_written >= bgwriter_lru_maxpages) + { + BgWriterStats.m_maxwritten_lru++; break; + } } if (++buf_id2 >= NBuffers) buf_id2 = 0; } + BgWriterStats.m_buf_written_lru += num_written; } } |