pg_stat_statements

安装(安装过程中需要重启数据库实例)

  • 编译插件
1
2
cd postgresql-14.8/contrib/pg_stat_statements
make && make install
  • 共享库引入插件,并增加配置
1
2
3
4
5
6
7
# postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
pg_stat_statements.track_utility = off
pg_stat_statements.track_planning = off
pg_stat_statements.save = on
  • 重启实例
1
/data/pg/pg14/14.8/bin/pg_ctl -D /data/pg/pg14/data restart
  • database 内引入插件
1
CREATE EXTENSION pg_stat_statements;
  • 查看插件
1
SELECT * FROM pg_available_extensions;

配置参数

  • pg_stat_statements.max:保留记录的语句个数,默认为 5000
  • pg_stat_statements.track:记录的 sql 类型
  • pg_stat_statements.track_utility:是否跟踪非 DML 语句,默认是 on
  • pg_stat_statements.track_planning:是否追踪执行计划和时间,开销较大,默认关闭
  • pg_stat_statements.save:重启后是否保留统计信息,默认是 on

常用 sql

  • 最耗时的 top5 sql
1
select dbid,query,total_exec_time from pg_stat_statements order by total_exec_time desc limit 5;
  • 最消耗 IO 的 top5 sql
1
select dbid,query from pg_stat_statements order by  (blk_read_time+blk_write_time) desc limit 5;
  • 响应时间抖动最严重的 top5 sql
1
select dbid,query,total_exec_time,stddev_exec_time from pg_stat_statements order by  stddev_exec_time desc limit 5;

参考