pg_stat_statements
是一个作为contrib模块实现的扩展,用于跟踪SQL语句的执行统计信息。
pg_stat_statements
在PostgreSQL 8.4中添加。
更改历史记录
- 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
- 添加了实用程序语句的查询混淆(提交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_time
min_time
→min_exec_time
max_time
→max_exec_time
mean_time
→mean_exec_time
stddev_time
→stddev_exec_time
- 添加了以下
pg_stat_statements
列plans
total_plan_time
min_plan_time
max_plan_time
mean_plan_time
stddev_plan_time
- 以下
- 添加了对WAL使用情况统计信息跟踪的支持(提交6b466bf5)
- 在
pg_stat_statements
视图中添加了以下其他列wal_records
wal_fpi
wal_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故障排除技巧 - 2020年8月CyberTec博客文章