The trace point was using the relfileno / fork / block for the to-be-read-in
buffer. Some upcoming work would make that more expensive to provide. We still
have buffer-flush-start/done, which can serve most tracing needs that
buffer-write-dirty could serve.
Discussion: https://postgr.es/m/
f5164e7a-eef6-8972-75a3-
8ac622ed0c6e@iki.fi
it's typically not actually been written to disk yet.)
The arguments are the same as for <literal>buffer-flush-start</literal>.</entry>
</row>
- <row>
- <entry><literal>buffer-write-dirty-start</literal></entry>
- <entry><literal>(ForkNumber, BlockNumber, Oid, Oid, Oid)</literal></entry>
- <entry>Probe that fires when a server process begins to write a dirty
- buffer. (If this happens often, it implies that
- <xref linkend="guc-shared-buffers"/> is too
- small or the background writer control parameters need adjustment.)
- arg0 and arg1 contain the fork and block numbers of the page.
- arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
- identifying the relation.</entry>
- </row>
- <row>
- <entry><literal>buffer-write-dirty-done</literal></entry>
- <entry><literal>(ForkNumber, BlockNumber, Oid, Oid, Oid)</literal></entry>
- <entry>Probe that fires when a dirty-buffer write is complete.
- The arguments are the same as for <literal>buffer-write-dirty-start</literal>.</entry>
- </row>
<row>
<entry><literal>wal-buffer-write-dirty-start</literal></entry>
<entry><literal>()</literal></entry>
}
/* OK, do the I/O */
- TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_START(forkNum, blockNum,
- smgr->smgr_rlocator.locator.spcOid,
- smgr->smgr_rlocator.locator.dbOid,
- smgr->smgr_rlocator.locator.relNumber);
-
FlushBuffer(buf, NULL, IOOBJECT_RELATION, io_context);
LWLockRelease(BufferDescriptorGetContentLock(buf));
ScheduleBufferTagForWriteback(&BackendWritebackContext,
&buf->tag);
-
- TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_DONE(forkNum, blockNum,
- smgr->smgr_rlocator.locator.spcOid,
- smgr->smgr_rlocator.locator.dbOid,
- smgr->smgr_rlocator.locator.relNumber);
}
else
{
probe buffer__sync__start(int, int);
probe buffer__sync__written(int);
probe buffer__sync__done(int, int, int);
- probe buffer__write__dirty__start(ForkNumber, BlockNumber, Oid, Oid, Oid);
- probe buffer__write__dirty__done(ForkNumber, BlockNumber, Oid, Oid, Oid);
probe deadlock__found();