aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/activity/pgstat_backend.c17
-rw-r--r--src/backend/utils/activity/pgstat_wal.c1
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c23
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();
}