pg_stat_statements

跟踪所有执行的 SQL 语句的计划和执行统计信息

概览

扩展包名版本分类许可证语言
pg_stat_statements1.11STATPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
6990pg_stat_statements-
相关扩展pg_qualstats pg_store_plans pg_track_settings pg_stat_monitor auto_explain pg_profile pg_show_plans pg_hint_plan
下游依赖pg_stat_kcache powa

版本

PG18PG17PG16PG15PG14
1.111.111.111.111.11

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

CREATE EXTENSION pg_stat_statements;

用法

pg_stat_statements: 追踪累积查询执行统计

pg_stat_statements 追踪服务器执行的所有 SQL 语句的规划和执行统计信息。

查询统计信息

-- 按总执行时间排序的热点查询
SELECT query, calls, total_exec_time, mean_exec_time, rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

-- 按共享缓冲区读取排序的 I/O 密集型查询
SELECT query, calls, shared_blks_read, shared_blks_hit,
       shared_blk_read_time
FROM pg_stat_statements
ORDER BY shared_blks_read DESC
LIMIT 10;

-- 扩展状态(释放次数、上次重置时间)
SELECT * FROM pg_stat_statements_info;

关键视图列

列名类型描述
queryidbigint标识规范化查询的哈希值
querytext代表性查询文本
callsbigint执行次数
total_exec_timedouble precision总执行时间(毫秒)
mean_exec_timedouble precision平均执行时间(毫秒)
rowsbigint检索/影响的总行数
shared_blks_hitbigint共享缓冲区缓存命中数
shared_blks_readbigint从磁盘读取的共享块数
shared_blk_read_timedouble precision读取共享块的时间(毫秒)
wal_recordsbigint生成的 WAL 记录数
wal_bytesnumeric生成的 WAL 总量(字节)
plansbigint规划次数
total_plan_timedouble precision总规划时间(毫秒)

函数

-- 重置所有统计信息
SELECT pg_stat_statements_reset();

-- 重置特定查询的统计
SELECT pg_stat_statements_reset(0, 0, queryid)
FROM pg_stat_statements
WHERE query LIKE '%my_table%';

-- 仅重置最小/最大值
SELECT pg_stat_statements_reset(0, 0, 0, true);

-- 不带文本查询(更少 I/O)
SELECT * FROM pg_stat_statements(showtext := false);

配置

参数默认值描述
pg_stat_statements.max5000最大追踪语句数(仅在服务器启动时)
pg_stat_statements.tracktoptopall(嵌套)或 none
pg_stat_statements.track_utilityon追踪实用命令
pg_stat_statements.track_planningoff追踪规划统计
pg_stat_statements.saveon跨服务器重启持久化

需要 shared_preload_libraries = 'pg_stat_statements'compute_query_id = on


最后修改 2026-03-12: update extension pages (f579993)