由 John Doe 五月 29, 2025
你需要跟踪数据库后台进程的压力变化吗?那么,你可能会要定期重置所有后台进程的统计信息。
特性提交日志
在pg_stat_reset_shared()
中添加重置所有全局统计信息的功能。
当前,pg_stat_reset_shared()
可以使用参数指定要重置的目标统计信息,由于该函数是严格模式(strict),当参数为NULL
时不执行任何操作。
本次提交对pg_stat_reset_shared()
进行了改进:将proisstrict
切换为false
,当参数值为NULL
或未指定参数时,不再不执行任何操作,而是允许重置该函数已处理的所有类型的统计信息。与之前一样,SLRU 统计不包含在重置范围内。
是否要重置该函数已涵盖的所有全局统计信息,由使用NULL
或无参数来进行控制。
讨论:https://postgr.es/m/4291a55137ddda77cf7cc5f46e846daf@oss.nttdata.com
示例
PostgreSQL 提供了几个系统视图,用于显示集群范围的统计信息。其中之一就是我们之前讨论过的新视图 pg_stats_checkpointer 。可以使用 pg_stat_reset_shared() 重置其中一些统计信息。除了 pg_stat_checkpointer 视图之外,还可以重置 pg_stat_bgwriter、pg_stat_io、pg_stat_wal、pg_stat_recovery_prefetch 和 pg_stat_archiver 中的统计信息。
在之前的 PostgreSQL 版本中,如果要重置所有视图中的统计信息,则必须针对所有类型的统计信息单独调用此函数,例如:
postgres=# select * from pg_stat_reset_shared('bgwriter');
pg_stat_reset_shared
----------------------
(1 row)
postgres=# select pg_stat_reset_shared('bgwriter');
pg_stat_reset_shared
----------------------
(1 row)
postgres=# select pg_stat_reset_shared('archiver');
pg_stat_reset_shared
----------------------
(1 row)
postgres=# select pg_stat_reset_shared('wal');
pg_stat_reset_shared
----------------------
(1 row)
postgres=# select pg_stat_reset_shared('io');
pg_stat_reset_shared
----------------------
(1 row)
postgres=# select pg_stat_reset_shared('recovery_prefetch');
pg_stat_reset_shared
----------------------
(1 row)
在新的 PostgreSQL 版本中,这种情况将会改变,调用不带参数的函数将立即重置所有这些统计信息:
postgres=# select pg_stat_reset_shared();
pg_stat_reset_shared
----------------------
(1 row)
postgres=# select stats_reset, now() from pg_stat_archiver ;
stats_reset | now
-------------------------------+-------------------------------
2025-04-12 10:29:19.341854+08 | 2025-04-12 10:30:42.304791+08
(1 row)
非常不错的体验,感谢所有参与的社区人员。
参考
提交日志:https://git.postgresql.org/pg/commitdiff/23c8c0c8f4721db693ef908c22f7cf754e6852a9