PG-316: Convert blocks timings to average per buckets.

pull/162/head
Ibrar Ahmed 2022-01-05 19:49:47 +00:00
parent 63908af3f3
commit eaa9c08e24
1 changed files with 37 additions and 26 deletions

View File

@ -35,6 +35,9 @@ PG_MODULE_MAGIC;
#define PGUNSIXBIT(val) (((val) & 0x3F) + '0') #define PGUNSIXBIT(val) (((val) & 0x3F) + '0')
#define _memset(_dst,_val,_size)\
memset((void*)_dst, _val, _size);
#define _snprintf(_str_dst, _str_src, _len, _max_len)\ #define _snprintf(_str_dst, _str_src, _len, _max_len)\
memcpy((void *)_str_dst, _str_src, _len < _max_len ? _len : _max_len) memcpy((void *)_str_dst, _str_src, _len < _max_len ? _len : _max_len)
@ -1344,33 +1347,41 @@ pgss_update_entry(pgssEntry *entry,
_snprintf(e->counters.error.message, error_info->message, message_len, ERROR_MESSAGE_LEN); _snprintf(e->counters.error.message, error_info->message, message_len, ERROR_MESSAGE_LEN);
} }
e->counters.calls.rows += rows; e->counters.calls.rows += rows;
if (e->counters.calls.calls == 0)
{
_memset(&e->counters.walusage, 0, sizeof(e->counters.walusage));
}
if (e->counters.calls.calls > 0)
{
if (bufusage) if (bufusage)
{ {
e->counters.blocks.shared_blks_hit += bufusage->shared_blks_hit; e->counters.blocks.shared_blks_hit += (int64)(bufusage->shared_blks_hit - e->counters.blocks.shared_blks_hit)/e->counters.calls.calls;
e->counters.blocks.shared_blks_read += bufusage->shared_blks_read; e->counters.blocks.shared_blks_read += (int64)(bufusage->shared_blks_read - e->counters.blocks.shared_blks_read)/e->counters.calls.calls;
e->counters.blocks.shared_blks_dirtied += bufusage->shared_blks_dirtied; e->counters.blocks.shared_blks_dirtied += (int64)(bufusage->shared_blks_dirtied - e->counters.blocks.shared_blks_dirtied)/e->counters.calls.calls;
e->counters.blocks.shared_blks_written += bufusage->shared_blks_written; e->counters.blocks.shared_blks_written += (int64)(bufusage->shared_blks_written - e->counters.blocks.shared_blks_written)/e->counters.calls.calls;
e->counters.blocks.local_blks_hit += bufusage->local_blks_hit; e->counters.blocks.local_blks_hit += (int64)(bufusage->local_blks_hit - e->counters.blocks.local_blks_hit)/e->counters.calls.calls;
e->counters.blocks.local_blks_read += bufusage->local_blks_read; e->counters.blocks.local_blks_read += (int64)(bufusage->local_blks_read - e->counters.blocks.local_blks_read)/e->counters.calls.calls;
e->counters.blocks.local_blks_dirtied += bufusage->local_blks_dirtied; e->counters.blocks.local_blks_dirtied += (int64)(bufusage->local_blks_dirtied - e->counters.blocks.local_blks_dirtied)/e->counters.calls.calls;
e->counters.blocks.local_blks_written += bufusage->local_blks_written; e->counters.blocks.local_blks_written += (int64)(bufusage->local_blks_written - e->counters.blocks.local_blks_written)/e->counters.calls.calls;
e->counters.blocks.temp_blks_read += bufusage->temp_blks_read; e->counters.blocks.temp_blks_read += (int64)(bufusage->temp_blks_read - e->counters.blocks.temp_blks_read)/e->counters.calls.calls;
e->counters.blocks.temp_blks_written += bufusage->temp_blks_written; e->counters.blocks.temp_blks_written += (int64)(bufusage->temp_blks_written - e->counters.blocks.temp_blks_written)/e->counters.calls.calls;
e->counters.blocks.blk_read_time += INSTR_TIME_GET_MILLISEC(bufusage->blk_read_time); e->counters.blocks.blk_read_time += (int64)(INSTR_TIME_GET_MILLISEC(bufusage->blk_read_time) - e->counters.blocks.blk_read_time)/e->counters.calls.calls;
e->counters.blocks.blk_write_time += INSTR_TIME_GET_MILLISEC(bufusage->blk_write_time); e->counters.blocks.blk_write_time += (int64)(INSTR_TIME_GET_MILLISEC(bufusage->blk_write_time) - e->counters.blocks.blk_write_time)/e->counters.calls.calls;
} }
e->counters.calls.usage += USAGE_EXEC(total_time);
if (sys_info) if (sys_info)
{ {
e->counters.sysinfo.utime += sys_info->utime; e->counters.sysinfo.utime = (int64)(sys_info->utime - e->counters.sysinfo.utime)/e->counters.calls.calls;
e->counters.sysinfo.stime += sys_info->stime; e->counters.sysinfo.stime = (int64)(sys_info->stime - e->counters.sysinfo.stime)/e->counters.calls.calls;
} }
if (walusage) if (walusage)
{ {
e->counters.walusage.wal_records += walusage->wal_records; e->counters.walusage.wal_records +=(int64) (walusage->wal_records - e->counters.walusage.wal_records)/e->counters.calls.calls;
e->counters.walusage.wal_fpi += walusage->wal_fpi; e->counters.walusage.wal_fpi +=(int64) (walusage->wal_fpi - e->counters.walusage.wal_fpi)/e->counters.calls.calls;
e->counters.walusage.wal_bytes += walusage->wal_bytes; e->counters.walusage.wal_bytes += (int64)( walusage->wal_bytes - e->counters.walusage.wal_bytes)/e->counters.calls.calls;
} }
}
e->counters.calls.usage += USAGE_EXEC(total_time);
SpinLockRelease(&e->mutex); SpinLockRelease(&e->mutex);
} }
} }