diff options
author | Andres Freund <andres@anarazel.de> | 2022-04-06 17:56:19 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2022-04-06 17:56:19 -0700 |
commit | 8fb580a35ce358063dfdd10991d017498283c767 (patch) | |
tree | 425767a0d794844d09fe549f89def74783ba6f05 /src/backend/utils/adt/pgstatfuncs.c | |
parent | 997afad89d12f314555600feee8189d753e105d1 (diff) | |
download | postgresql-8fb580a35ce358063dfdd10991d017498283c767.tar.gz postgresql-8fb580a35ce358063dfdd10991d017498283c767.zip |
pgstat: prepare APIs used by pgstatfuncs for shared memory stats.
With the introduction of PgStat_Kind PgStat_Single_Reset_Type,
PgStat_Shared_Reset_Target don't make sense anymore. Replace them with
PgStat_Kind.
Instead of having dedicated reset functions for different kinds of stats, use
two generic helper routines (one to reset all stats of a kind, one to reset
one stats entry).
A number of reset functions were named pgstat_reset_*_counter(), despite
affecting multiple counters. The generic helper routines get rid of
pgstat_reset_single_counter(), pgstat_reset_subscription_counter().
Rename pgstat_reset_slru_counter(), pgstat_reset_replslot_counter() to
pgstat_reset_slru(), pgstat_reset_replslot() respectively, and have them only
deal with a single SLRU/slot. Resetting all SLRUs/slots goes through the
generic pgstat_reset_of_kind().
Previously pg_stat_reset_replication_slot() used SearchNamedReplicationSlot()
to check if a slot exists. API wise it seems better to move that to
pgstat_replslot.c.
This is done separately from the - quite large - shared memory statistics
patch to make review easier.
Reviewed-By: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Discussion: https://postgr.es/m/20220404041516.cctrvpadhuriawlq@alap3.anarazel.de
Diffstat (limited to 'src/backend/utils/adt/pgstatfuncs.c')
-rw-r--r-- | src/backend/utils/adt/pgstatfuncs.c | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index fd4276fbc67..709dd5548ac 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -24,7 +24,6 @@ #include "pgstat.h" #include "postmaster/bgworker_internals.h" #include "postmaster/postmaster.h" -#include "replication/slot.h" #include "storage/proc.h" #include "storage/procarray.h" #include "utils/acl.h" @@ -2075,7 +2074,24 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS) { char *target = text_to_cstring(PG_GETARG_TEXT_PP(0)); - pgstat_reset_shared_counters(target); + if (strcmp(target, "archiver") == 0) + pgstat_reset_of_kind(PGSTAT_KIND_ARCHIVER); + else if (strcmp(target, "bgwriter") == 0) + { + /* + * Historically checkpointer was part of bgwriter, continue to reset + * both for now. + */ + pgstat_reset_of_kind(PGSTAT_KIND_BGWRITER); + pgstat_reset_of_kind(PGSTAT_KIND_CHECKPOINTER); + } + else if (strcmp(target, "wal") == 0) + pgstat_reset_of_kind(PGSTAT_KIND_WAL); + else + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("unrecognized reset target: \"%s\"", target), + errhint("Target must be \"archiver\", \"bgwriter\", or \"wal\"."))); PG_RETURN_VOID(); } @@ -2086,7 +2102,7 @@ pg_stat_reset_single_table_counters(PG_FUNCTION_ARGS) { Oid taboid = PG_GETARG_OID(0); - pgstat_reset_single_counter(taboid, RESET_TABLE); + pgstat_reset(PGSTAT_KIND_RELATION, MyDatabaseId, taboid); PG_RETURN_VOID(); } @@ -2096,7 +2112,7 @@ pg_stat_reset_single_function_counters(PG_FUNCTION_ARGS) { Oid funcoid = PG_GETARG_OID(0); - pgstat_reset_single_counter(funcoid, RESET_FUNCTION); + pgstat_reset(PGSTAT_KIND_FUNCTION, MyDatabaseId, funcoid); PG_RETURN_VOID(); } @@ -2107,10 +2123,13 @@ pg_stat_reset_slru(PG_FUNCTION_ARGS) { char *target = NULL; - if (!PG_ARGISNULL(0)) + if (PG_ARGISNULL(0)) + pgstat_reset_of_kind(PGSTAT_KIND_SLRU); + else + { target = text_to_cstring(PG_GETARG_TEXT_PP(0)); - - pgstat_reset_slru_counter(target); + pgstat_reset_slru(target); + } PG_RETURN_VOID(); } @@ -2121,36 +2140,14 @@ pg_stat_reset_replication_slot(PG_FUNCTION_ARGS) { char *target = NULL; - if (!PG_ARGISNULL(0)) + if (PG_ARGISNULL(0)) + pgstat_reset_of_kind(PGSTAT_KIND_REPLSLOT); + else { - ReplicationSlot *slot; - target = text_to_cstring(PG_GETARG_TEXT_PP(0)); - - /* - * Check if the slot exists with the given name. It is possible that - * by the time this message is executed the slot is dropped but at - * least this check will ensure that the given name is for a valid - * slot. - */ - slot = SearchNamedReplicationSlot(target, true); - - if (!slot) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("replication slot \"%s\" does not exist", - target))); - - /* - * Nothing to do for physical slots as we collect stats only for - * logical slots. - */ - if (SlotIsPhysical(slot)) - PG_RETURN_VOID(); + pgstat_reset_replslot(target); } - pgstat_reset_replslot_counter(target); - PG_RETURN_VOID(); } @@ -2163,7 +2160,7 @@ pg_stat_reset_subscription_stats(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) { /* Clear all subscription stats */ - subid = InvalidOid; + pgstat_reset_of_kind(PGSTAT_KIND_SUBSCRIPTION); } else { @@ -2173,10 +2170,9 @@ pg_stat_reset_subscription_stats(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid subscription OID %u", subid))); + pgstat_reset(PGSTAT_KIND_SUBSCRIPTION, InvalidOid, subid); } - pgstat_reset_subscription_counter(subid); - PG_RETURN_VOID(); } |