postgres数据库安装插件pg_stat_statements
pg_stat_statements简介:
- pg_stat_statements能够统计sql的执行统计信息,简言之,就是统计慢查询的sql
-
是一个插件,一定需要先安装,安装完还需要配置。
1.安装postgres数据库
官网:https://www.postgresql.org/download/
选择在什么系统上安装:
当前在windows下安装,选择windows,
当前选择最新安装
正常安装。
2.安装pg_stat_statements插件
安装完成后,在PostgreSQL\16\share\extension安装目录下检查是否有pg_stat_statements--1.6--1.7.sql语句,1.6--1.7应该是对应安装的版本,有这个文件pg_stat_statements.sql,就说明安装成功了。
连接postgres数据库,执行 create extension pg_stat_statements;语句,即安装了pg_stat_statements插件。
3.pg_stat_statements配置:
在目录PostgreSQL\16\data下找到文件postgresql.conf文件进行编辑,在文件中新增以下配置:
- shared_preload_libraries = 'pg_stat_statements' # (change requires restart) 注意这行本来就有,需要去掉注释符号#,下面两行是新增的
用于加载pg_stat_statements模块,需要重启postgres服务。
- pg_stat_statements.max = 10000
pg_stat_statements.max是由该模块跟踪的语句的最大数目(即pg_stat_statements视图中行的最大数量)。如果观测到的可区分的语句超过这个数量,最少被执行的语句的信息将会被丢弃。默认值为 5000。这个参数只能在服务器启动时设置。
- pg_stat_statements.track = all
pg_stat_statements.track控制哪些语句会被该模块计数。指定top可以跟踪顶层语句(那些直接由客户端发出的语句),指定all还可以跟踪嵌套的语句(例如在函数中调用的语句),指定none可以禁用语句统计信息收集。默认值是top。 只有超级用户能够改变这个设置。
配置完成后保存。
在数据库客户端执行select * from pg_stat_statements;能成功,说明已经安装好了pg_stat_statements插件,就可以用该插件来查询所有SQL语句的执行统计信息。
4.pg_stat_statements视图字段说明:
5.数据库查询sql性能分析:
#调用次数较多的SQL
select * from pg_stat_statements stat order by calls desc limit 10;
#总执行时间较长的SQL
select * from pg_stat_statements order by total_time desc limit 10;
#平均执行时间较长的SQL
select * from pg_stat_statements order by mean_time desc limit 10;
#在读/写块上总执行时间最多的SQL
select * from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 10;
#在读/写块上平均执行时间最多的SQL
select * from pg_stat_statements order by (blk_read_time+blk_write_time)/calls desc limit 10;
#查看时间抖动严重的SQL
select * from pg_stat_statements order by stddev_time desc limit 10;
#消耗共享内存较多的SQL
select * from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 10;
#使用临时块较多的SQL
select * from pg_stat_statements order by temp_blks_written desc limit 10;
#缓冲池命中率较低的SQL
SELECT *,cast(100.0*shared_blks_hit/nullif(shared_blks_hit + shared_blks_read,0) as decimal(10,2)) AS hit_percent FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;
参考:
https://blog.csdn.net/dazuiba008/article/details/22785843/
https://www.cnblogs.com/haha029/p/15763339.html