Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 23c8c0c

Browse files
committed
Add ability to reset all shared stats types in pg_stat_reset_shared()
Currently, pg_stat_reset_shared() can use an argument to specify the target of statistics to reset, doing nothing for NULL as it is strict. This patch adds to pg_stat_reset_shared() the possibility to reset all the stats types already handled in this function rather than do nothing if the argument value given is NULL or if nothing is specified (proisstrict is switched to false). Like previously, SLRUs are not included in what gets reset. The idea to use NULL or no argument to control if all the shared stats already covered by this function should be reset has been proposed by Andres Freund. Bump catalog version. Author: Atsushi Torikoshi Reviewed-by: Kyotaro Horiguchi, Michael Paquier, Bharath Rupireddy, Matthias van de Meent Discussion: https://postgr.es/m/4291a55137ddda77cf7cc5f46e846daf@oss.nttdata.com
1 parent a9f19c1 commit 23c8c0c

File tree

7 files changed

+47
-19
lines changed

7 files changed

+47
-19
lines changed

doc/src/sgml/monitoring.sgml

+4-1
Original file line numberDiff line numberDiff line change
@@ -4712,7 +4712,7 @@ description | Waiting for a newly initialized WAL file to reach durable storage
47124712
<indexterm>
47134713
<primary>pg_stat_reset_shared</primary>
47144714
</indexterm>
4715-
<function>pg_stat_reset_shared</function> ( <type>text</type> )
4715+
<function>pg_stat_reset_shared</function> ( [ <parameter>target</parameter> <type>text</type> <literal>DEFAULT</literal> <literal>NULL</literal> ] )
47164716
<returnvalue>void</returnvalue>
47174717
</para>
47184718
<para>
@@ -4730,6 +4730,9 @@ description | Waiting for a newly initialized WAL file to reach durable storage
47304730
<structname>pg_stat_wal</structname> view or
47314731
<literal>recovery_prefetch</literal> to reset all the counters shown
47324732
in the <structname>pg_stat_recovery_prefetch</structname> view.
4733+
If <parameter>target</parameter> is <literal>NULL</literal> or
4734+
is not specified, all the counters from the views listed above are
4735+
reset.
47334736
</para>
47344737
<para>
47354738
This function is restricted to superusers by default, but other users

src/backend/catalog/system_functions.sql

+7
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,13 @@ LANGUAGE internal
621621
STRICT IMMUTABLE PARALLEL SAFE
622622
AS 'unicode_is_normalized';
623623

624+
CREATE OR REPLACE FUNCTION
625+
pg_stat_reset_shared(target text DEFAULT NULL)
626+
RETURNS void
627+
LANGUAGE INTERNAL
628+
CALLED ON NULL INPUT VOLATILE PARALLEL SAFE
629+
AS 'pg_stat_reset_shared';
630+
624631
--
625632
-- The default permissions for functions mean that anyone can execute them.
626633
-- A number of functions shouldn't be executable by just anyone, but rather

src/backend/utils/adt/pgstatfuncs.c

+16-1
Original file line numberDiff line numberDiff line change
@@ -1685,7 +1685,22 @@ pg_stat_reset(PG_FUNCTION_ARGS)
16851685
Datum
16861686
pg_stat_reset_shared(PG_FUNCTION_ARGS)
16871687
{
1688-
char *target = text_to_cstring(PG_GETARG_TEXT_PP(0));
1688+
char *target = NULL;
1689+
1690+
if (PG_ARGISNULL(0))
1691+
{
1692+
/* Reset all the statistics when nothing is specified */
1693+
pgstat_reset_of_kind(PGSTAT_KIND_ARCHIVER);
1694+
pgstat_reset_of_kind(PGSTAT_KIND_BGWRITER);
1695+
pgstat_reset_of_kind(PGSTAT_KIND_CHECKPOINTER);
1696+
pgstat_reset_of_kind(PGSTAT_KIND_IO);
1697+
XLogPrefetchResetStats();
1698+
pgstat_reset_of_kind(PGSTAT_KIND_WAL);
1699+
1700+
PG_RETURN_VOID();
1701+
}
1702+
1703+
target = text_to_cstring(PG_GETARG_TEXT_PP(0));
16891704

16901705
if (strcmp(target, "archiver") == 0)
16911706
pgstat_reset_of_kind(PGSTAT_KIND_ARCHIVER);

src/include/catalog/catversion.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,6 @@
5757
*/
5858

5959
/* yyyymmddN */
60-
#define CATALOG_VERSION_NO 202310301
60+
#define CATALOG_VERSION_NO 202311121
6161

6262
#endif

src/include/catalog/pg_proc.dat

+3-2
Original file line numberDiff line numberDiff line change
@@ -5881,8 +5881,9 @@
58815881
prorettype => 'void', proargtypes => '', prosrc => 'pg_stat_reset' },
58825882
{ oid => '3775',
58835883
descr => 'statistics: reset collected statistics shared across the cluster',
5884-
proname => 'pg_stat_reset_shared', provolatile => 'v', prorettype => 'void',
5885-
proargtypes => 'text', prosrc => 'pg_stat_reset_shared' },
5884+
proname => 'pg_stat_reset_shared', proisstrict => 'f', provolatile => 'v',
5885+
prorettype => 'void', proargtypes => 'text',
5886+
prosrc => 'pg_stat_reset_shared' },
58865887
{ oid => '3776',
58875888
descr => 'statistics: reset collected statistics for a single table or index in the current database or shared across all databases in the cluster',
58885889
proname => 'pg_stat_reset_single_table_counters', provolatile => 'v',

src/test/regress/expected/stats.out

+8-7
Original file line numberDiff line numberDiff line change
@@ -975,38 +975,39 @@ SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
975975
(1 row)
976976

977977
SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
978-
-- Test that reset_shared with no specified stats type doesn't reset anything
979-
SELECT pg_stat_reset_shared(NULL);
978+
-- Test that reset_shared with no argument resets all the stats types
979+
-- supported (providing NULL as argument has the same effect).
980+
SELECT pg_stat_reset_shared();
980981
pg_stat_reset_shared
981982
----------------------
982983

983984
(1 row)
984985

985-
SELECT stats_reset = :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver;
986+
SELECT stats_reset > :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver;
986987
?column?
987988
----------
988989
t
989990
(1 row)
990991

991-
SELECT stats_reset = :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
992+
SELECT stats_reset > :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
992993
?column?
993994
----------
994995
t
995996
(1 row)
996997

997-
SELECT stats_reset = :'checkpointer_reset_ts'::timestamptz FROM pg_stat_checkpointer;
998+
SELECT stats_reset > :'checkpointer_reset_ts'::timestamptz FROM pg_stat_checkpointer;
998999
?column?
9991000
----------
10001001
t
10011002
(1 row)
10021003

1003-
SELECT stats_reset = :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch;
1004+
SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch;
10041005
?column?
10051006
----------
10061007
t
10071008
(1 row)
10081009

1009-
SELECT stats_reset = :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
1010+
SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
10101011
?column?
10111012
----------
10121013
t

src/test/regress/sql/stats.sql

+8-7
Original file line numberDiff line numberDiff line change
@@ -488,13 +488,14 @@ SELECT pg_stat_reset_shared('wal');
488488
SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
489489
SELECT stats_reset AS wal_reset_ts FROM pg_stat_wal \gset
490490

491-
-- Test that reset_shared with no specified stats type doesn't reset anything
492-
SELECT pg_stat_reset_shared(NULL);
493-
SELECT stats_reset = :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver;
494-
SELECT stats_reset = :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
495-
SELECT stats_reset = :'checkpointer_reset_ts'::timestamptz FROM pg_stat_checkpointer;
496-
SELECT stats_reset = :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch;
497-
SELECT stats_reset = :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
491+
-- Test that reset_shared with no argument resets all the stats types
492+
-- supported (providing NULL as argument has the same effect).
493+
SELECT pg_stat_reset_shared();
494+
SELECT stats_reset > :'archiver_reset_ts'::timestamptz FROM pg_stat_archiver;
495+
SELECT stats_reset > :'bgwriter_reset_ts'::timestamptz FROM pg_stat_bgwriter;
496+
SELECT stats_reset > :'checkpointer_reset_ts'::timestamptz FROM pg_stat_checkpointer;
497+
SELECT stats_reset > :'recovery_prefetch_reset_ts'::timestamptz FROM pg_stat_recovery_prefetch;
498+
SELECT stats_reset > :'wal_reset_ts'::timestamptz FROM pg_stat_wal;
498499

499500
-- Test error case for reset_shared with unknown stats type
500501
SELECT pg_stat_reset_shared('unknown');

0 commit comments

Comments
 (0)