pg_stat_statements 的时间范围是多少

问题描述 投票:0回答:3

我想知道 postgres 中的“pg_stat_statements”视图。 数据的时间范围是多少?它是否显示过去 24 小时内执行的查询或执行的总体查询?由于该表不包含任何时间戳。

sql database postgresql postgresql-9.2 pg-stat-statements
3个回答
11
投票

pg_stat_statements 提供的视图的时间范围是从上次重置 (pg_stat_statements_reset) 或扩展创建的时间开始,这可能是一个很长的时间。

如果达到最大阈值(最近的 Postgres 版本为 5000),则存在使不频繁的语句过期的逻辑,这意味着如果不经常查询视图,您可能看不到完整的活动。

为了更好地处理这些数据,您基本上有两个选择:

1) 每 24 小时调用 pg_stat_statements_reset() 一次,这意味着查询数据将仅反映最近的活动(理想情况下,您会跟踪重置发生的时间,以便您可以计算出每分钟的调用次数等)

2) 使用单独的监控工具来拍摄快照并可以保留历史 pg_stat_statements 统计信息

您选择哪一个取决于您的要求,尽管对于生产系统我通常会选择 (2)。

免责声明:我是 pganalyze (https://pganalyze.com) 的作者,这是一个托管的 Postgres 监控工具,还提供历史 pg_stat_statement 统计数据。


5
投票

没有时间范围,只有跟踪的语句的最大数量。

F.28.3。配置参数

pg_stat_statements.max (integer)

pg_stat_statements.max
是模块跟踪的最大语句数(即
pg_stat_statements
视图中的最大行数)。如果观察到的不同语句多于该数量,则有关执行次数最少的语句的信息将被丢弃。默认值为 1000。该参数只能在服务器启动时设置。


0
投票

2020 年的 PostgreSQL 14 添加了 pg_stat_statements_info 视图。

https://www.depesz.com/2020/12/21/waiting-for-postgresql-14-pg_stat_statements-track-time-at-which-all-statistics-were-last-reset/

PostgreSQL 14+

SELECT stats_reset FROM pg_stat_statements_info;

stats_reset          
 2020-12-20 12:06:02.099943+01
(1 ROW)

这将显示使用时统计数据的最后重置时间

SELECT pg_stat_statements_reset();

所有其他答案都是适用且有用的建议。语句将根据 pg_stat_statements.max 被驱逐。定期重置或使用监控工具可以让您分析设定时间范围内的最新活动 - 例如新版本应用程序代码的部署。

© www.soinside.com 2019 - 2024. All rights reserved.