diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/activity/pgstat_backend.c | 17 | ||||
-rw-r--r-- | src/backend/utils/activity/pgstat_wal.c | 1 | ||||
-rw-r--r-- | src/backend/utils/adt/pgstatfuncs.c | 23 |
3 files changed, 26 insertions, 15 deletions
diff --git a/src/backend/utils/activity/pgstat_backend.c b/src/backend/utils/activity/pgstat_backend.c index 3c9ebbcd69c..a9343b7b59e 100644 --- a/src/backend/utils/activity/pgstat_backend.c +++ b/src/backend/utils/activity/pgstat_backend.c @@ -103,11 +103,10 @@ pgstat_fetch_stat_backend_by_pid(int pid, BackendType *bktype) if (bktype) *bktype = B_INVALID; - /* - * This could be an auxiliary process but these do not report backend - * statistics due to pgstat_tracks_backend_bktype(), so there is no need - * for an extra call to AuxiliaryPidGetProc(). - */ + /* this could be an auxiliary process */ + if (!proc) + proc = AuxiliaryPidGetProc(pid); + if (!proc) return NULL; @@ -117,6 +116,10 @@ pgstat_fetch_stat_backend_by_pid(int pid, BackendType *bktype) if (!beentry) return NULL; + /* check if the backend type tracks statistics */ + if (!pgstat_tracks_backend_bktype(beentry->st_backendType)) + return NULL; + backend_stats = pgstat_fetch_stat_backend(procNumber); if (!backend_stats) return NULL; @@ -125,10 +128,6 @@ pgstat_fetch_stat_backend_by_pid(int pid, BackendType *bktype) if (beentry->st_procpid != pid) return NULL; - /* backend may be gone, so recheck in case */ - if (beentry->st_backendType == B_INVALID) - return NULL; - if (bktype) *bktype = beentry->st_backendType; diff --git a/src/backend/utils/activity/pgstat_wal.c b/src/backend/utils/activity/pgstat_wal.c index 943be0cbeef..5d3da4b674e 100644 --- a/src/backend/utils/activity/pgstat_wal.c +++ b/src/backend/utils/activity/pgstat_wal.c @@ -55,6 +55,7 @@ pgstat_report_wal(bool force) /* flush IO stats */ pgstat_flush_io(nowait); + (void) pgstat_flush_backend(nowait, PGSTAT_BACKEND_FLUSH_IO); } /* diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 68830db8633..0212d8d5906 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -1919,19 +1919,30 @@ Datum pg_stat_reset_backend_stats(PG_FUNCTION_ARGS) { PGPROC *proc; + PgBackendStatus *beentry; + ProcNumber procNumber; int backend_pid = PG_GETARG_INT32(0); proc = BackendPidGetProc(backend_pid); - /* - * This could be an auxiliary process but these do not report backend - * statistics due to pgstat_tracks_backend_bktype(), so there is no need - * for an extra call to AuxiliaryPidGetProc(). - */ + /* This could be an auxiliary process */ + if (!proc) + proc = AuxiliaryPidGetProc(backend_pid); + if (!proc) PG_RETURN_VOID(); - pgstat_reset(PGSTAT_KIND_BACKEND, InvalidOid, GetNumberFromPGProc(proc)); + procNumber = GetNumberFromPGProc(proc); + + beentry = pgstat_get_beentry_by_proc_number(procNumber); + if (!beentry) + PG_RETURN_VOID(); + + /* Check if the backend type tracks statistics */ + if (!pgstat_tracks_backend_bktype(beentry->st_backendType)) + PG_RETURN_VOID(); + + pgstat_reset(PGSTAT_KIND_BACKEND, InvalidOid, procNumber); PG_RETURN_VOID(); } |