summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2009-03-22 22:39:05 +0000
committerTom Lane2009-03-22 22:39:05 +0000
commit863e97d71298bf7cbcc98355ef5f36178608dca3 (patch)
tree35acc3913c32a44c5fa9d75cecfbd5813ea65860
parentebc27fc394d76faa4cf512686d0a87434e171912 (diff)
Add isExtend to the parameters of the buffer_read_start and buffer_read_done
DTrace probes, so that ordinary reads can be distinguished from relation extension operations. Move buffer_read_start probe to before the smgrnblocks() call that's needed in the isExtend case, since really that step should be charged as part of the time needed for the extension operation. (This makes it slightly harder to match the read_start with the associated read_done, since now you can't match them on blockNumber, but it should still be possible since isExtend operations on the same relation can never be interleaved.) Per recent discussion. In passing, add the page identity (forkNum/blockNum) to the parameters of the buffer_flush_start/buffer_flush_done probes, which were unaccountably lacking the info.
-rw-r--r--src/backend/storage/buffer/bufmgr.c21
-rw-r--r--src/backend/utils/probes.d8
2 files changed, 18 insertions, 11 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 92e0b7f25d..bbfe8c5372 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -256,15 +256,16 @@ ReadBuffer_common(SMgrRelation smgr, bool isLocalBuf, ForkNumber forkNum,
isExtend = (blockNum == P_NEW);
- /* Substitute proper block number if caller asked for P_NEW */
- if (isExtend)
- blockNum = smgrnblocks(smgr, forkNum);
-
TRACE_POSTGRESQL_BUFFER_READ_START(forkNum, blockNum,
smgr->smgr_rnode.spcNode,
smgr->smgr_rnode.dbNode,
smgr->smgr_rnode.relNode,
- isLocalBuf);
+ isLocalBuf,
+ isExtend);
+
+ /* Substitute proper block number if caller asked for P_NEW */
+ if (isExtend)
+ blockNum = smgrnblocks(smgr, forkNum);
if (isLocalBuf)
{
@@ -318,6 +319,7 @@ ReadBuffer_common(SMgrRelation smgr, bool isLocalBuf, ForkNumber forkNum,
smgr->smgr_rnode.dbNode,
smgr->smgr_rnode.relNode,
isLocalBuf,
+ isExtend,
found);
return BufferDescriptorGetBuffer(bufHdr);
@@ -447,6 +449,7 @@ ReadBuffer_common(SMgrRelation smgr, bool isLocalBuf, ForkNumber forkNum,
smgr->smgr_rnode.dbNode,
smgr->smgr_rnode.relNode,
isLocalBuf,
+ isExtend,
found);
return BufferDescriptorGetBuffer(bufHdr);
@@ -1865,7 +1868,9 @@ FlushBuffer(volatile BufferDesc *buf, SMgrRelation reln)
if (reln == NULL)
reln = smgropen(buf->tag.rnode);
- TRACE_POSTGRESQL_BUFFER_FLUSH_START(reln->smgr_rnode.spcNode,
+ TRACE_POSTGRESQL_BUFFER_FLUSH_START(buf->tag.forkNum,
+ buf->tag.blockNum,
+ reln->smgr_rnode.spcNode,
reln->smgr_rnode.dbNode,
reln->smgr_rnode.relNode);
@@ -1902,7 +1907,9 @@ FlushBuffer(volatile BufferDesc *buf, SMgrRelation reln)
*/
TerminateBufferIO(buf, true, 0);
- TRACE_POSTGRESQL_BUFFER_FLUSH_DONE(reln->smgr_rnode.spcNode,
+ TRACE_POSTGRESQL_BUFFER_FLUSH_DONE(buf->tag.forkNum,
+ buf->tag.blockNum,
+ reln->smgr_rnode.spcNode,
reln->smgr_rnode.dbNode,
reln->smgr_rnode.relNode);
diff --git a/src/backend/utils/probes.d b/src/backend/utils/probes.d
index 078b81655e..08937810b9 100644
--- a/src/backend/utils/probes.d
+++ b/src/backend/utils/probes.d
@@ -54,10 +54,10 @@ provider postgresql {
probe sort__start(int, bool, int, int, bool);
probe sort__done(bool, long);
- probe buffer__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid, bool);
- probe buffer__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool);
- probe buffer__flush__start(Oid, Oid, Oid);
- probe buffer__flush__done(Oid, Oid, Oid);
+ probe buffer__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool);
+ probe buffer__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool, bool);
+ probe buffer__flush__start(ForkNumber, BlockNumber, Oid, Oid, Oid);
+ probe buffer__flush__done(ForkNumber, BlockNumber, Oid, Oid, Oid);
probe buffer__hit(bool);
probe buffer__miss(bool);