Add target "slru" to pg_stat_reset_shared()
authorMichael Paquier <[email protected]>
Thu, 16 Nov 2023 06:41:34 +0000 (15:41 +0900)
committerMichael Paquier <[email protected]>
Thu, 16 Nov 2023 06:41:34 +0000 (15:41 +0900)
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/e3c25d72e81378e7b64f3c52e0306fc9@oss.nttdata.com

doc/src/sgml/monitoring.sgml
src/backend/utils/adt/pgstatfuncs.c
src/test/regress/expected/stats.out
src/test/regress/sql/stats.sql

index 1e9913c8bc771b00e4ae54a6ae1d7647548c7b34..42509042ad5f16d50bf13b67ee905bd076ed7800 100644 (file)
@@ -4749,6 +4749,12 @@ description | Waiting for a newly initialized WAL file to reach durable storage
           the <structname>pg_stat_recovery_prefetch</structname> view.
          </para>
         </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
index 3a9f9bc4fe155bca7ab5fb108d972f3f2d5c073c..0cea320c00e0ebefa2ab097838d41c3608fe7d5b 100644 (file)
@@ -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();
 }
index 6ed3584a763dc71ac29c498d4953f69e820ed041..7869c598f92f7fbb4c5fa03bac820691aff03bed 100644 (file)
@@ -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();
index fd8afeeae510a95b4e91ef539021fe96c9f1914f..5b4e451a2e3206342597afc0dbe7603521aa2225 100644 (file)
@@ -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