pg_stat_statements 的时间范围是啥

Posted

技术标签:

【中文标题】pg_stat_statements 的时间范围是啥【英文标题】:What is the timeframe for pg_stat_statementspg_stat_statements 的时间范围是什么 【发布时间】:2018-06-11 17:27:09 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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 统计信息。

【讨论】:

非常感谢@LukasFittl 我会看看 pg_stat_statements_reset() 会影响性能吗?由于查询计划程序使用查询统计信息,在这种情况下,它必须再次构建统计信息。还是 PostgreSQL 使用其他地方的统计数据? @Yogi 不显着。规划器不使用 pg_stat_statements 数据(还有其他表)。频繁重置的一个缺点是它会增加 pg_stat_statements 使用的查询文本文件的 I/O,因为它必须更频繁地写入查询文本。出于这个原因,每秒重置一次可能是个坏主意,但每小时重置一次是合理的。 感谢@LukasFittl,它真的很有帮助。【参考方案2】:

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

F.28.3. Configuration Parameters

pg_stat_statements.max (integer)

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

【讨论】:

谢谢,但它是否显示过去 X 小时内执行的查询? from 和 to 时间范围的价值是什么?

以上是关于pg_stat_statements 的时间范围是啥的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 致命:无法访问文件“pg_stat_statements”:没有这样的文件或目录

sql 使用pg_stat_statements缓慢查询

如何更详细地了解 php-fpm 如何消耗 cpu 资源(php 的 pg_stat_statements)

日常

PostgreSQL 安装扩展包

基于pg_qualstats和hypopg的自动索引调优