diff options
author | Michael Paquier <michael@paquier.xyz> | 2025-02-28 11:20:31 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2025-02-28 11:20:31 +0900 |
commit | c2a50ac678eb5ccee271aef3e7ed146ac395a32b (patch) | |
tree | 98145d57e043c33125f83fc1718c46b181e734dc /src/backend/utils/adt/pgstatfuncs.c | |
parent | 2a083ab807db6d9e2e0e3aa82ee8f6ff9fc44c8d (diff) | |
download | postgresql-c2a50ac678eb5ccee271aef3e7ed146ac395a32b.tar.gz postgresql-c2a50ac678eb5ccee271aef3e7ed146ac395a32b.zip |
Invent pgstat_fetch_stat_backend_by_pid()
This code is extracted from pg_stat_get_backend_io() in pgstatfuncs.c,
so as it can be shared with other areas that need backend pgstats
entries while having the benefits of the various sanity checks
refactored here. As per its name, this retrieves backend statistics
based on a PID, with the option of retrieving a BackendType if given in
input.
Currently, this is used for the backend-level IO statistics. The next
move would be to reuse that for the backend-level WAL statistics.
Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/Z3zqc4o09dM/Ezyz@ip-10-97-1-34.eu-west-3.compute.internal
Diffstat (limited to 'src/backend/utils/adt/pgstatfuncs.c')
-rw-r--r-- | src/backend/utils/adt/pgstatfuncs.c | 30 |
1 files changed, 1 insertions, 29 deletions
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index efb6d0032af..68830db8633 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -1576,46 +1576,18 @@ pg_stat_get_backend_io(PG_FUNCTION_ARGS) ReturnSetInfo *rsinfo; BackendType bktype; int pid; - PGPROC *proc; - ProcNumber procNumber; PgStat_Backend *backend_stats; PgStat_BktypeIO *bktype_stats; - PgBackendStatus *beentry; InitMaterializedSRF(fcinfo, 0); rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; pid = PG_GETARG_INT32(0); - proc = BackendPidGetProc(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(). - */ - if (!proc) - return (Datum) 0; - - procNumber = GetNumberFromPGProc(proc); + backend_stats = pgstat_fetch_stat_backend_by_pid(pid, &bktype); - beentry = pgstat_get_beentry_by_proc_number(procNumber); - if (!beentry) - return (Datum) 0; - - backend_stats = pgstat_fetch_stat_backend(procNumber); if (!backend_stats) return (Datum) 0; - bktype = beentry->st_backendType; - - /* if PID does not match, leave */ - if (beentry->st_procpid != pid) - return (Datum) 0; - - /* backend may be gone, so recheck in case */ - if (bktype == B_INVALID) - return (Datum) 0; - bktype_stats = &backend_stats->io_stats; /* |