diff --git a/src/backend/storage/buffer/buf_init.c b/src/backend/storage/buffer/buf_init.c index dcfebd0d433ae6e3345da32a4493363ffd4dbd5e..0a148ced4fdc7283952fdef4301be38554278263 100644 --- a/src/backend/storage/buffer/buf_init.c +++ b/src/backend/storage/buffer/buf_init.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.8 1997/03/28 07:04:52 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.9 1997/04/18 02:53:15 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -120,9 +120,12 @@ long *CommitInfoNeedsSave; /* to write buffers where we have filled in */ SPINLOCK BufMgrLock; -int ReadBufferCount; -int BufferHitCount; -int BufferFlushCount; +long int ReadBufferCount; +long int ReadLocalBufferCount; +long int BufferHitCount; +long int LocalBufferHitCount; +long int BufferFlushCount; +long int LocalBufferFlushCount; /* diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 5331ab3fbe2dbf84e4e7a78bff9a146adfd722e9..cd057a830a4dc662de7b784a5f4d1707895fcfd0 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.11 1997/03/28 07:05:03 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.12 1997/04/18 02:53:23 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -75,9 +75,12 @@ #include "catalog/catalog.h" extern SPINLOCK BufMgrLock; -extern int ReadBufferCount; -extern int BufferHitCount; -extern int BufferFlushCount; +extern long int ReadBufferCount; +extern long int ReadLocalBufferCount; +extern long int BufferHitCount; +extern long int LocalBufferHitCount; +extern long int BufferFlushCount; +extern long int LocalBufferFlushCount; static int WriteMode = BUFFER_LATE_WRITE; /* Delayed write is default */ @@ -217,7 +220,9 @@ ReadBufferWithBufferLock(Relation reln, isLocalBuf = reln->rd_islocal; if (isLocalBuf) { + ReadLocalBufferCount++; bufHdr = LocalBufferAlloc(reln, blockNum, &found); + if (found) LocalBufferHitCount++; } else { ReadBufferCount++; @@ -473,7 +478,6 @@ BufferAlloc(Relation reln, } else { - BufferFlushCount++; /* * BM_JUST_DIRTIED cleared by BufferReplace and shouldn't * be setted by anyone. - vadim 01/17/97 @@ -760,6 +764,7 @@ FlushBuffer(Buffer buffer, bool release) bufHdr->tag.blockNum, bufHdr->sb_relname); return (STATUS_ERROR); } + BufferFlushCount++; SpinAcquire(BufMgrLock); /* @@ -955,6 +960,7 @@ BufferSync() elog(WARN, "BufferSync: cannot write %u for %s", bufHdr->tag.blockNum, bufHdr->sb_relname); } + BufferFlushCount++; /* * If this buffer was marked by someone as DIRTY while * we were flushing it out we must not clear DIRTY flag @@ -1052,16 +1058,24 @@ void PrintBufferUsage(FILE *statfp) { float hitrate; + float localhitrate; if (ReadBufferCount==0) hitrate = 0.0; else hitrate = (float)BufferHitCount * 100.0/ReadBufferCount; - fprintf(statfp, "!\t%ld blocks read, %ld blocks written, buffer hit rate = %.2f%%\n", - ReadBufferCount - BufferHitCount + NDirectFileRead, - BufferFlushCount + NDirectFileWrite, - hitrate); + if (ReadLocalBufferCount==0) + localhitrate = 0.0; + else + localhitrate = (float)LocalBufferHitCount * 100.0/ReadLocalBufferCount; + + fprintf(statfp, "!\tShared blocks: %10ld read, %10ld written, buffer hit rate = %.2f%%\n", + ReadBufferCount - BufferHitCount, BufferFlushCount, hitrate); + fprintf(statfp, "!\tLocal blocks: %10ld read, %10ld written, buffer hit rate = %.2f%%\n", + ReadLocalBufferCount - LocalBufferHitCount, LocalBufferFlushCount, localhitrate); + fprintf(statfp, "!\tDirect blocks: %10ld read, %10ld written\n", + NDirectFileRead, NDirectFileWrite); } void @@ -1070,6 +1084,9 @@ ResetBufferUsage() BufferHitCount = 0; ReadBufferCount = 0; BufferFlushCount = 0; + LocalBufferHitCount = 0; + ReadLocalBufferCount = 0; + LocalBufferFlushCount = 0; NDirectFileRead = 0; NDirectFileWrite = 0; } @@ -1264,6 +1281,8 @@ BufferReplace(BufferDesc *bufHdr, bool bufferLockHeld) if (status == SM_FAIL) return (FALSE); + BufferFlushCount++; + return (TRUE); } diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index cd2476b6e871a2b94a2d335f6c863ba39388193c..3e7f7e2c77602d9c67daaaeaa84914d223e441af 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.5 1997/01/16 08:13:14 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.6 1997/04/18 02:53:37 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -47,6 +47,8 @@ #include "executor/execdebug.h" /* for NDirectFileRead */ #include "catalog/catalog.h" +extern long int LocalBufferFlushCount; + int NLocBuffer = 64; BufferDesc *LocalBufferDescriptors = NULL; long *LocalRefCount = NULL; @@ -118,6 +120,7 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr) /* flush this page */ smgrwrite(bufrel->rd_rel->relsmgr, bufrel, bufHdr->tag.blockNum, (char *) MAKE_PTR(bufHdr->data)); + LocalBufferFlushCount++; } /* @@ -192,6 +195,7 @@ FlushLocalBuffer(Buffer buffer, bool release) Assert(bufrel != NULL); smgrflush(bufrel->rd_rel->relsmgr, bufrel, bufHdr->tag.blockNum, (char *) MAKE_PTR(bufHdr->data)); + LocalBufferFlushCount++; Assert(LocalRefCount[bufid] > 0); if ( release ) @@ -261,6 +265,7 @@ LocalBufferSync(void) smgrwrite(bufrel->rd_rel->relsmgr, bufrel, buf->tag.blockNum, (char *) MAKE_PTR(buf->data)); + LocalBufferFlushCount++; buf->tag.relId.relId = InvalidOid; buf->flags &= ~BM_DIRTY;