Skip to content

Commit 2e8a0ed

Browse files
committed
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 28cac71 (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
1 parent 816f105 commit 2e8a0ed

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

doc/src/sgml/monitoring.sgml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4749,6 +4749,12 @@ description | Waiting for a newly initialized WAL file to reach durable storage
47494749
the <structname>pg_stat_recovery_prefetch</structname> view.
47504750
</para>
47514751
</listitem>
4752+
<listitem>
4753+
<para>
4754+
<literal>slru</literal>: Reset all the counters shown in the
4755+
<structname>pg_stat_slru</structname> view.
4756+
</para>
4757+
</listitem>
47524758
<listitem>
47534759
<para>
47544760
<literal>wal</literal>: Reset all the counters shown in the

src/backend/utils/adt/pgstatfuncs.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1695,6 +1695,7 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS)
16951695
pgstat_reset_of_kind(PGSTAT_KIND_CHECKPOINTER);
16961696
pgstat_reset_of_kind(PGSTAT_KIND_IO);
16971697
XLogPrefetchResetStats();
1698+
pgstat_reset_of_kind(PGSTAT_KIND_SLRU);
16981699
pgstat_reset_of_kind(PGSTAT_KIND_WAL);
16991700

17001701
PG_RETURN_VOID();
@@ -1712,13 +1713,15 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS)
17121713
pgstat_reset_of_kind(PGSTAT_KIND_IO);
17131714
else if (strcmp(target, "recovery_prefetch") == 0)
17141715
XLogPrefetchResetStats();
1716+
else if (strcmp(target, "slru") == 0)
1717+
pgstat_reset_of_kind(PGSTAT_KIND_SLRU);
17151718
else if (strcmp(target, "wal") == 0)
17161719
pgstat_reset_of_kind(PGSTAT_KIND_WAL);
17171720
else
17181721
ereport(ERROR,
17191722
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
17201723
errmsg("unrecognized reset target: \"%s\"", target),
1721-
errhint("Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", or \"wal\".")));
1724+
errhint("Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", \"slru\", or \"wal\".")));
17221725

17231726
PG_RETURN_VOID();
17241727
}

src/test/regress/expected/stats.out

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -960,6 +960,21 @@ SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_rec
960960
(1 row)
961961

962962
SELECT stats_reset AS recovery_prefetch_reset_ts FROM pg_stat_recovery_prefetch \gset
963+
-- Test that reset_shared with slru specified as the stats type works
964+
SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset
965+
SELECT pg_stat_reset_shared('slru');
966+
pg_stat_reset_shared
967+
----------------------
968+
969+
(1 row)
970+
971+
SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru;
972+
?column?
973+
----------
974+
t
975+
(1 row)
976+
977+
SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset
963978
-- Test that reset_shared with wal specified as the stats type works
964979
SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
965980
SELECT pg_stat_reset_shared('wal');
@@ -1007,6 +1022,12 @@ SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_rec
10071022
t
10081023
(1 row)
10091024

1025+
SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru;
1026+
?column?
1027+
----------
1028+
t
1029+
(1 row)
1030+
10101031
SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
10111032
?column?
10121033
----------
@@ -1016,7 +1037,7 @@ SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
10161037
-- Test error case for reset_shared with unknown stats type
10171038
SELECT pg_stat_reset_shared('unknown');
10181039
ERROR: unrecognized reset target: "unknown"
1019-
HINT: Target must be "archiver", "bgwriter", "checkpointer", "io", "recovery_prefetch", or "wal".
1040+
HINT: Target must be "archiver", "bgwriter", "checkpointer", "io", "recovery_prefetch", "slru", or "wal".
10201041
-- Test that reset works for pg_stat_database
10211042
-- Since pg_stat_database stats_reset starts out as NULL, reset it once first so we have something to compare it to
10221043
SELECT pg_stat_reset();

src/test/regress/sql/stats.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,12 @@ SELECT pg_stat_reset_shared('recovery_prefetch');
482482
SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch;
483483
SELECT stats_reset AS recovery_prefetch_reset_ts FROM pg_stat_recovery_prefetch \gset
484484

485+
-- Test that reset_shared with slru specified as the stats type works
486+
SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset
487+
SELECT pg_stat_reset_shared('slru');
488+
SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru;
489+
SELECT max(stats_reset) AS slru_reset_ts FROM pg_stat_slru \gset
490+
485491
-- Test that reset_shared with wal specified as the stats type works
486492
SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
487493
SELECT pg_stat_reset_shared('wal');
@@ -495,6 +501,7 @@ SELECT stats_reset > :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver;
495501
SELECT stats_reset > :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
496502
SELECT stats_reset > :'checkpointer_reset_ts'::timestamptz FROM pg_stat_checkpointer;
497503
SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch;
504+
SELECT max(stats_reset) > :'slru_reset_ts'::timestamptz FROM pg_stat_slru;
498505
SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
499506

500507
-- Test error case for reset_shared with unknown stats type

0 commit comments

Comments
 (0)