Improve IO accounting for temp relation writes
Both pgstat_database and pgBufferUsage count IO timing for reads of temporary relation blocks into local buffers. However, both failed to count write IO timing for flushes of dirty local buffers. Fix. Additionally, FlushRelationBuffers() seems to have omitted counting write IO (both count and timing) stats for both pgstat_database and pgBufferUsage. Fix. Author: Melanie Plageman <melanieplageman@gmail.com> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/20230321023451.7rzy4kjj2iktrg2r%40awork3.anarazel.de
This commit is contained in:
parent
bf5a894c55
commit
704261ecc6
|
@ -4062,6 +4062,8 @@ FlushRelationBuffers(Relation rel)
|
|||
{
|
||||
int i;
|
||||
BufferDesc *bufHdr;
|
||||
instr_time io_start,
|
||||
io_time;
|
||||
|
||||
if (RelationUsesLocalBuffers(rel))
|
||||
{
|
||||
|
@ -4087,6 +4089,11 @@ FlushRelationBuffers(Relation rel)
|
|||
|
||||
PageSetChecksumInplace(localpage, bufHdr->tag.blockNum);
|
||||
|
||||
if (track_io_timing)
|
||||
INSTR_TIME_SET_CURRENT(io_start);
|
||||
else
|
||||
INSTR_TIME_SET_ZERO(io_start);
|
||||
|
||||
smgrwrite(RelationGetSmgr(rel),
|
||||
BufTagGetForkNum(&bufHdr->tag),
|
||||
bufHdr->tag.blockNum,
|
||||
|
@ -4098,6 +4105,16 @@ FlushRelationBuffers(Relation rel)
|
|||
|
||||
pgstat_count_io_op(IOOBJECT_TEMP_RELATION, IOCONTEXT_NORMAL, IOOP_WRITE);
|
||||
|
||||
if (track_io_timing)
|
||||
{
|
||||
INSTR_TIME_SET_CURRENT(io_time);
|
||||
INSTR_TIME_SUBTRACT(io_time, io_start);
|
||||
pgstat_count_buffer_write_time(INSTR_TIME_GET_MICROSEC(io_time));
|
||||
INSTR_TIME_ADD(pgBufferUsage.blk_write_time, io_time);
|
||||
}
|
||||
|
||||
pgBufferUsage.local_blks_written++;
|
||||
|
||||
/* Pop the error context stack */
|
||||
error_context_stack = errcallback.previous;
|
||||
}
|
||||
|
|
|
@ -176,6 +176,8 @@ GetLocalVictimBuffer(void)
|
|||
int trycounter;
|
||||
uint32 buf_state;
|
||||
BufferDesc *bufHdr;
|
||||
instr_time io_start,
|
||||
io_time;
|
||||
|
||||
ResourceOwnerEnlargeBuffers(CurrentResourceOwner);
|
||||
|
||||
|
@ -239,6 +241,11 @@ GetLocalVictimBuffer(void)
|
|||
|
||||
PageSetChecksumInplace(localpage, bufHdr->tag.blockNum);
|
||||
|
||||
if (track_io_timing)
|
||||
INSTR_TIME_SET_CURRENT(io_start);
|
||||
else
|
||||
INSTR_TIME_SET_ZERO(io_start);
|
||||
|
||||
/* And write... */
|
||||
smgrwrite(oreln,
|
||||
BufTagGetForkNum(&bufHdr->tag),
|
||||
|
@ -252,6 +259,15 @@ GetLocalVictimBuffer(void)
|
|||
|
||||
/* Temporary table I/O does not use Buffer Access Strategies */
|
||||
pgstat_count_io_op(IOOBJECT_TEMP_RELATION, IOCONTEXT_NORMAL, IOOP_WRITE);
|
||||
|
||||
if (track_io_timing)
|
||||
{
|
||||
INSTR_TIME_SET_CURRENT(io_time);
|
||||
INSTR_TIME_SUBTRACT(io_time, io_start);
|
||||
pgstat_count_buffer_write_time(INSTR_TIME_GET_MICROSEC(io_time));
|
||||
INSTR_TIME_ADD(pgBufferUsage.blk_write_time, io_time);
|
||||
}
|
||||
|
||||
pgBufferUsage.local_blks_written++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue