mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
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 28cac71bd3
(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
This commit is contained in:
@ -4749,6 +4749,12 @@ description | Waiting for a newly initialized WAL file to reach durable storage
|
|||||||
the <structname>pg_stat_recovery_prefetch</structname> view.
|
the <structname>pg_stat_recovery_prefetch</structname> view.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>slru</literal>: Reset all the counters shown in the
|
||||||
|
<structname>pg_stat_slru</structname> view.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<literal>wal</literal>: Reset all the counters shown in the
|
<literal>wal</literal>: Reset all the counters shown in the
|
||||||
|
@ -1695,6 +1695,7 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS)
|
|||||||
pgstat_reset_of_kind(PGSTAT_KIND_CHECKPOINTER);
|
pgstat_reset_of_kind(PGSTAT_KIND_CHECKPOINTER);
|
||||||
pgstat_reset_of_kind(PGSTAT_KIND_IO);
|
pgstat_reset_of_kind(PGSTAT_KIND_IO);
|
||||||
XLogPrefetchResetStats();
|
XLogPrefetchResetStats();
|
||||||
|
pgstat_reset_of_kind(PGSTAT_KIND_SLRU);
|
||||||
pgstat_reset_of_kind(PGSTAT_KIND_WAL);
|
pgstat_reset_of_kind(PGSTAT_KIND_WAL);
|
||||||
|
|
||||||
PG_RETURN_VOID();
|
PG_RETURN_VOID();
|
||||||
@ -1712,13 +1713,15 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS)
|
|||||||
pgstat_reset_of_kind(PGSTAT_KIND_IO);
|
pgstat_reset_of_kind(PGSTAT_KIND_IO);
|
||||||
else if (strcmp(target, "recovery_prefetch") == 0)
|
else if (strcmp(target, "recovery_prefetch") == 0)
|
||||||
XLogPrefetchResetStats();
|
XLogPrefetchResetStats();
|
||||||
|
else if (strcmp(target, "slru") == 0)
|
||||||
|
pgstat_reset_of_kind(PGSTAT_KIND_SLRU);
|
||||||
else if (strcmp(target, "wal") == 0)
|
else if (strcmp(target, "wal") == 0)
|
||||||
pgstat_reset_of_kind(PGSTAT_KIND_WAL);
|
pgstat_reset_of_kind(PGSTAT_KIND_WAL);
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
errmsg("unrecognized reset target: \"%s\"", target),
|
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();
|
PG_RETURN_VOID();
|
||||||
}
|
}
|
||||||
|
@ -960,6 +960,21 @@ SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_rec
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT stats_reset AS recovery_prefetch_reset_ts FROM pg_stat_recovery_prefetch \gset
|
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
|
-- 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 stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
|
||||||
SELECT pg_stat_reset_shared('wal');
|
SELECT pg_stat_reset_shared('wal');
|
||||||
@ -1007,6 +1022,12 @@ SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_rec
|
|||||||
t
|
t
|
||||||
(1 row)
|
(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;
|
SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
|
||||||
?column?
|
?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
|
-- Test error case for reset_shared with unknown stats type
|
||||||
SELECT pg_stat_reset_shared('unknown');
|
SELECT pg_stat_reset_shared('unknown');
|
||||||
ERROR: unrecognized reset target: "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
|
-- 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
|
-- 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();
|
SELECT pg_stat_reset();
|
||||||
|
@ -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 > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch;
|
||||||
SELECT stats_reset AS recovery_prefetch_reset_ts FROM pg_stat_recovery_prefetch \gset
|
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
|
-- 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 stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
|
||||||
SELECT pg_stat_reset_shared('wal');
|
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 > :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
|
||||||
SELECT stats_reset > :'checkpointer_reset_ts'::timestamptz FROM pg_stat_checkpointer;
|
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 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;
|
SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
|
||||||
|
|
||||||
-- Test error case for reset_shared with unknown stats type
|
-- Test error case for reset_shared with unknown stats type
|
||||||
|
Reference in New Issue
Block a user