PG-586: pg_stat_monitor: CPU and user timing should be captured

for utility statements as well

Setting user and sys time to 0 in case there is a problem getting
rusage details.
pull/367/head
Hamid Akhtar 2023-01-24 20:02:28 +05:00 committed by Muhammad Usama
parent ee18c16149
commit 9327c864d3
1 changed files with 16 additions and 6 deletions

View File

@ -711,11 +711,16 @@ pgss_ExecutorEnd(QueryDesc *queryDesc)
*/ */
InstrEndLoop(queryDesc->totaltime); InstrEndLoop(queryDesc->totaltime);
sys_info.utime = 0;
sys_info.stime = 0;
if (getrusage(RUSAGE_SELF, &rusage_end) != 0) if (getrusage(RUSAGE_SELF, &rusage_end) != 0)
elog(DEBUG1, "pg_stat_monitor: failed to execute getrusage"); elog(DEBUG1, "pg_stat_monitor: failed to execute getrusage");
else
{
sys_info.utime = time_diff(rusage_end.ru_utime, rusage_start.ru_utime); sys_info.utime = time_diff(rusage_end.ru_utime, rusage_start.ru_utime);
sys_info.stime = time_diff(rusage_end.ru_stime, rusage_start.ru_stime); sys_info.stime = time_diff(rusage_end.ru_stime, rusage_start.ru_stime);
}
pgss_store(queryId, /* query id */ pgss_store(queryId, /* query id */
queryDesc->sourceText, /* query text */ queryDesc->sourceText, /* query text */
@ -1030,13 +1035,18 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
PG_RE_THROW(); PG_RE_THROW();
} }
sys_info.utime = 0;
sys_info.stime = 0;
PG_END_TRY(); PG_END_TRY();
if (getrusage(RUSAGE_SELF, &rusage_end) != 0) if (getrusage(RUSAGE_SELF, &rusage_end) != 0)
elog(DEBUG1, "pg_stat_monitor: failed to execute getrusage"); elog(DEBUG1, "pg_stat_monitor: failed to execute getrusage");
else
{
sys_info.utime = time_diff(rusage_end.ru_utime, rusage_start.ru_utime); sys_info.utime = time_diff(rusage_end.ru_utime, rusage_start.ru_utime);
sys_info.stime = time_diff(rusage_end.ru_stime, rusage_start.ru_stime); sys_info.stime = time_diff(rusage_end.ru_stime, rusage_start.ru_stime);
}
INSTR_TIME_SET_CURRENT(duration); INSTR_TIME_SET_CURRENT(duration);
INSTR_TIME_SUBTRACT(duration, start); INSTR_TIME_SUBTRACT(duration, start);