pg_stat_statements 是一个 contrib 模块,它作为 扩展 实现,用于跟踪 SQL 语句的执行统计信息。
pg_stat_statements 在 PostgreSQL 8.4 中被添加。
变更历史
- PostgreSQL 19
- 添加了以下列来跟踪通用和自定义计划调用(提交 3357471c)
generic_plan_callscustom_plan_calls
- 添加了以下列来跟踪通用和自定义计划调用(提交 3357471c)
- PostgreSQL 18
- PostgreSQL 17
- 保存点名称现在显示为常量(提交 31de7e60)
- 两阶段提交命令的 GID 现在显示为常量(提交 638d42a3)
DEALLOCATE语句的名称显示为常量(提交 bb45156f)- 向视图
pg_stat_statements添加了jit_deform_count和jit_deform_time列(提交 5a3423ad) CALL参数现在显示为常量(提交 11c34b34)- 向视图
pg_stat_statements添加了local_blk_read_time和local_blk_write_time列(提交 5147ab1d) - 向视图
pg_stat_statements添加了stats_since和minmax_stats_since列(提交 dc9f8a79)
- PostgreSQL 16
- 为实用语句添加了查询打乱(commit 3db72ebc)
- PostgreSQL 15
- PostgreSQL 14
- 现在跟踪
CREATE TABLE AS、SELECT INTO、CREATE MATERIALIZED VIEW和FETCH命令检索或受影响的总行数(提交 6023b7ea) - 现在跟踪
REFRESH MATERIALIZED VIEW处理的总行数(提交 b62e6056) - 添加了视图
pg_stat_statements_info以显示有关pg_stat_statements操作的统计信息(初始提交 9fbc3f31) - 向视图
pg_stat_statements添加了toplevel列,指示跟踪的语句是顶层语句还是嵌套语句(提交 6b4d23fe)
- 现在跟踪
- PostgreSQL 13
- 配置选项
pg_stat_statements.track_utility用于跟踪 WAL 使用情况统计信息(提交 6b466bf5) - 配置选项
pg_stat_statements.track_planning用于跟踪规划统计信息(提交 17e03282) - 添加了对规划统计信息跟踪的支持(提交 17e03282)
- 以下
pg_stat_statements列已重命名total_time→total_exec_timemin_time→min_exec_timemax_time→max_exec_timemean_time→mean_exec_timestddev_time→stddev_exec_time
- 添加了以下
pg_stat_statements列planstotal_plan_timemin_plan_timemax_plan_timemean_plan_timestddev_plan_time
- 以下
- 添加了对 WAL 使用统计信息跟踪的支持(提交 6b466bf5)
- 向
pg_stat_statements视图添加了以下附加列wal_recordswal_fpiwal_bytes
- 向
- 配置选项
- PostgreSQL 12
- 现在可以重置特定数据库、用户和查询的统计信息(提交 43cbedab)
- PostgreSQL 11
queryid已扩展到 64 位,以减少冲突的可能性(提交 cff440d3)
- PostgreSQL 10
- 被忽略的常量显示为“
$N”而不是“?”(提交 a6f22e83)
- 被忽略的常量显示为“
- PostgreSQL 9.5
- 添加了最小、最大、平均和标准差时间的统计信息(提交 717f7095)
- PostgreSQL 9.4
- PostgreSQL 9.2
- SQL 文本标准化(提交 7313cc01)
- 添加了脏缓冲区计数(提交 22543674)
- 添加了
blk_read_time和blk_write_time列,如果启用了track_io_timing,这些列将被填充(提交 5b4f3466)
- PostgreSQL 9.1
- PostgreSQL 9.0
- 添加了缓冲区访问计数器(提交 8964dbd5)
- PostgreSQL 8.4
- 添加(提交 7466eeac;请注意,几个后续提交添加了此扩展所需的基础架构)
示例
任意查询的 pg_stat_statements 记录示例
proddb=# SELECT * FROM pg_stat_statements WHERE queryid='2070117699405581796'\gx
-[ RECORD 1 ]-------+-----------------------------------------------------------------------------------------
userid | 16384
dbid | 16389
queryid | 2070117699405581796
query | /* getCommentsTotal */ +
| SELECT COUNT(*) AS total +
| FROM entry c +
| INNER JOIN object o +
| ON o.object_id = c.entry_reference_id +
| INNER JOIN object_version ov +
| ON (ov.object_id = o.object_id AND ov.object_status_id = $1 AND ov.version = $2)+
| WHERE c.entry_status = $3 +
| AND o.site_id IN (SELECT * FROM f_user_get_site_ids($4))
calls | 4
total_time | 7556.941424000001
min_time | 37.801478
max_time | 5922.666363
mean_time | 1889.2353560000001
stddev_time | 2349.3165152342754
rows | 4
shared_blks_hit | 204947
shared_blks_read | 305706
shared_blks_dirtied | 132062
shared_blks_written | 162
local_blks_hit | 0
local_blks_read | 0
local_blks_dirtied | 0
local_blks_written | 0
temp_blks_read | 0
temp_blks_written | 0
blk_read_time | 0
blk_write_time | 0
参考资料
- PostgreSQL 文档: pg_stat_statements
有用链接
- 一个快速的 pg_stat_statements 故障排除技巧 - CyberTec 于 2020 年 8 月的博文
