7
7
*
8
8
*
9
9
* IDENTIFICATION
10
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.11 1997/03/28 07:05:03 scrappy Exp $
10
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.12 1997/04/18 02:53:23 vadim Exp $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
75
75
#include "catalog/catalog.h"
76
76
77
77
extern SPINLOCK BufMgrLock ;
78
- extern int ReadBufferCount ;
79
- extern int BufferHitCount ;
80
- extern int BufferFlushCount ;
78
+ extern long int ReadBufferCount ;
79
+ extern long int ReadLocalBufferCount ;
80
+ extern long int BufferHitCount ;
81
+ extern long int LocalBufferHitCount ;
82
+ extern long int BufferFlushCount ;
83
+ extern long int LocalBufferFlushCount ;
81
84
82
85
static int WriteMode = BUFFER_LATE_WRITE ; /* Delayed write is default */
83
86
@@ -217,7 +220,9 @@ ReadBufferWithBufferLock(Relation reln,
217
220
isLocalBuf = reln -> rd_islocal ;
218
221
219
222
if (isLocalBuf ) {
223
+ ReadLocalBufferCount ++ ;
220
224
bufHdr = LocalBufferAlloc (reln , blockNum , & found );
225
+ if (found ) LocalBufferHitCount ++ ;
221
226
} else {
222
227
ReadBufferCount ++ ;
223
228
@@ -473,7 +478,6 @@ BufferAlloc(Relation reln,
473
478
}
474
479
else
475
480
{
476
- BufferFlushCount ++ ;
477
481
/*
478
482
* BM_JUST_DIRTIED cleared by BufferReplace and shouldn't
479
483
* be setted by anyone. - vadim 01/17/97
@@ -760,6 +764,7 @@ FlushBuffer(Buffer buffer, bool release)
760
764
bufHdr -> tag .blockNum , bufHdr -> sb_relname );
761
765
return (STATUS_ERROR );
762
766
}
767
+ BufferFlushCount ++ ;
763
768
764
769
SpinAcquire (BufMgrLock );
765
770
/*
@@ -955,6 +960,7 @@ BufferSync()
955
960
elog (WARN , "BufferSync: cannot write %u for %s" ,
956
961
bufHdr -> tag .blockNum , bufHdr -> sb_relname );
957
962
}
963
+ BufferFlushCount ++ ;
958
964
/*
959
965
* If this buffer was marked by someone as DIRTY while
960
966
* we were flushing it out we must not clear DIRTY flag
@@ -1052,16 +1058,24 @@ void
1052
1058
PrintBufferUsage (FILE * statfp )
1053
1059
{
1054
1060
float hitrate ;
1061
+ float localhitrate ;
1055
1062
1056
1063
if (ReadBufferCount == 0 )
1057
1064
hitrate = 0.0 ;
1058
1065
else
1059
1066
hitrate = (float )BufferHitCount * 100.0 /ReadBufferCount ;
1060
1067
1061
- fprintf (statfp , "!\t%ld blocks read, %ld blocks written, buffer hit rate = %.2f%%\n" ,
1062
- ReadBufferCount - BufferHitCount + NDirectFileRead ,
1063
- BufferFlushCount + NDirectFileWrite ,
1064
- hitrate );
1068
+ if (ReadLocalBufferCount == 0 )
1069
+ localhitrate = 0.0 ;
1070
+ else
1071
+ localhitrate = (float )LocalBufferHitCount * 100.0 /ReadLocalBufferCount ;
1072
+
1073
+ fprintf (statfp , "!\tShared blocks: %10ld read, %10ld written, buffer hit rate = %.2f%%\n" ,
1074
+ ReadBufferCount - BufferHitCount , BufferFlushCount , hitrate );
1075
+ fprintf (statfp , "!\tLocal blocks: %10ld read, %10ld written, buffer hit rate = %.2f%%\n" ,
1076
+ ReadLocalBufferCount - LocalBufferHitCount , LocalBufferFlushCount , localhitrate );
1077
+ fprintf (statfp , "!\tDirect blocks: %10ld read, %10ld written\n" ,
1078
+ NDirectFileRead , NDirectFileWrite );
1065
1079
}
1066
1080
1067
1081
void
@@ -1070,6 +1084,9 @@ ResetBufferUsage()
1070
1084
BufferHitCount = 0 ;
1071
1085
ReadBufferCount = 0 ;
1072
1086
BufferFlushCount = 0 ;
1087
+ LocalBufferHitCount = 0 ;
1088
+ ReadLocalBufferCount = 0 ;
1089
+ LocalBufferFlushCount = 0 ;
1073
1090
NDirectFileRead = 0 ;
1074
1091
NDirectFileWrite = 0 ;
1075
1092
}
@@ -1264,6 +1281,8 @@ BufferReplace(BufferDesc *bufHdr, bool bufferLockHeld)
1264
1281
if (status == SM_FAIL )
1265
1282
return (FALSE);
1266
1283
1284
+ BufferFlushCount ++ ;
1285
+
1267
1286
return (TRUE);
1268
1287
}
1269
1288
0 commit comments