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

 

posted @ 2024-08-16 16:58  紫蕈  阅读(250)  评论(0编辑  收藏  举报