diff options
author | Michael Paquier | 2023-11-16 06:41:34 +0000 |
---|---|---|
committer | Michael Paquier | 2023-11-16 06:41:34 +0000 |
commit | 2e8a0edc2a3321582d5da65690b0371654c7a44f (patch) | |
tree | d2096f4b09320df166858798166c86527bfce770 | |
parent | 816f10564a8671918e170a547625584d10587cf4 (diff) |
Add target "slru" to pg_stat_reset_shared()
Currently, pg_stat_reset_shared() cannot reset the counters in the view
pg_stat_slru even if it is a type of shared stats. This patch adds
support for a new value in pg_stat_reset_shared(), called "slru", able
to do that. Note that pg_stat_reset_shared(NULL) also resets SLRU
counters.
There may be a point in removing pg_stat_reset_slru() that was
introduced in 28cac71bd368 (v13~) as the new option overlaps with this
function, but we would lose the ability to reset individual SLRU
counters. This is left for future reconsideration.
Author: Atsushi Torikoshi
Discussion: https://postgr.es/m/[email protected]
-rw-r--r-- | doc/src/sgml/monitoring.sgml | 6 | ||||
-rw-r--r-- | src/backend/utils/adt/pgstatfuncs.c | 5 | ||||
-rw-r--r-- | src/test/regress/expected/stats.out | 23 | ||||
-rw-r--r-- | src/test/regress/sql/stats.sql | 7 |
4 files changed, 39 insertions, 2 deletions
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 1e9913c8bc..42509042ad 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -4751,6 +4751,12 @@ description | Waiting for a newly initialized WAL file to reach durable storage </listitem> <listitem> <para> + <literal>slru</literal>: Reset all the counters shown in the + <structname>pg_stat_slru</structname> view. + </para> + </listitem> + <listitem> + <para> <literal>wal</literal>: Reset all the counters shown in the <structname>pg_stat_wal</structname> view. </para> diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 3a9f9bc4fe..0cea320c00 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -1695,6 +1695,7 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS) pgstat_reset_of_kind(PGSTAT_KIND_CHECKPOINTER); pgstat_reset_of_kind(PGSTAT_KIND_IO); XLogPrefetchResetStats(); + pgstat_reset_of_kind(PGSTAT_KIND_SLRU); pgstat_reset_of_kind(PGSTAT_KIND_WAL); PG_RETURN_VOID(); @@ -1712,13 +1713,15 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS) pgstat_reset_of_kind(PGSTAT_KIND_IO); else if (strcmp(target, "recovery_prefetch") == 0) XLogPrefetchResetStats(); + else if (strcmp(target, "slru") == 0) + pgstat_reset_of_kind(PGSTAT_KIND_SLRU); 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\", \"checkpointer\", \"io\", \"recovery_prefetch\", or \"wal\"."))); + errhint("Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", or \"wal\"."))); PG_RETURN_VOID(); } diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out index 6ed3584a76..7869c598f9 100644 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@ -960,6 +960,21 @@ SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_rec (1 row) SELECT stats_reset AS recovery_prefetch_reset_ts FROM pg_stat_recovery_prefetch \gset +-- Test that reset_shared with slru specified as the stats type works +SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset +SELECT pg_stat_reset_shared('slru'); + pg_stat_reset_shared +---------------------- + +(1 row) + +SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru; + ?column? +---------- + t +(1 row) + +SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset -- Test that reset_shared with wal specified as the stats type works SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset SELECT pg_stat_reset_shared('wal'); @@ -1007,6 +1022,12 @@ SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_rec t (1 row) +SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru; + ?column? +---------- + t +(1 row) + SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal; ?column? ---------- @@ -1016,7 +1037,7 @@ SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal; -- Test error case for reset_shared with unknown stats type SELECT pg_stat_reset_shared('unknown'); ERROR: unrecognized reset target: "unknown" -HINT: Target must be "archiver", "bgwriter", "checkpointer", "io", "recovery_prefetch", or "wal". +HINT: Target must be "archiver", "bgwriter", "checkpointer", "io", "recovery_prefetch", "slru", or "wal". -- Test that reset works for pg_stat_database -- Since pg_stat_database stats_reset starts out as NULL, reset it once first so we have something to compare it to SELECT pg_stat_reset(); diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql index fd8afeeae5..5b4e451a2e 100644 --- a/src/test/regress/sql/stats.sql +++ b/src/test/regress/sql/stats.sql @@ -482,6 +482,12 @@ SELECT pg_stat_reset_shared('recovery_prefetch'); SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch; SELECT stats_reset AS recovery_prefetch_reset_ts FROM pg_stat_recovery_prefetch \gset +-- Test that reset_shared with slru specified as the stats type works +SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset +SELECT pg_stat_reset_shared('slru'); +SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru; +SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset + -- Test that reset_shared with wal specified as the stats type works SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset SELECT pg_stat_reset_shared('wal'); @@ -495,6 +501,7 @@ SELECT stats_reset > :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver; SELECT stats_reset > :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter; SELECT stats_reset > :'checkpointer_reset_ts'::timestamptz FROM pg_stat_checkpointer; SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch; +SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru; SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal; -- Test error case for reset_shared with unknown stats type |