PG的pg_stat_statements插件
pg_stat_statements可追踪一个服务器所执行的所有 SQL 语句的执行统计信息,可以用于统计数据库的资源开销,分析TOP SQL。
一、插件安装
1、编译安装
进入postgresql源码目录的contrib目录下,查看是否有pg_stat_statements子目录
# pwd /usr/local/postgresql-12.2/contrib/pg_stat_statements # make && make install
进入postgresql的安装目录,若在share/extension目录下以下pg_stat_statements相关文件,说明该工具安装成功
# pwd /usr/local/pgsql/share/extension [postgres@sansi_test extension]$ ll | grep pg_stat_statements -rw-r--r-- 1 root root 1246 Oct 25 15:46 pg_stat_statements--1.0--1.1.sql -rw-r--r-- 1 root root 1336 Oct 25 15:46 pg_stat_statements--1.1--1.2.sql -rw-r--r-- 1 root root 1454 Oct 25 15:46 pg_stat_statements--1.2--1.3.sql -rw-r--r-- 1 root root 345 Oct 25 15:46 pg_stat_statements--1.3--1.4.sql -rw-r--r-- 1 root root 305 Oct 25 15:46 pg_stat_statements--1.4--1.5.sql -rw-r--r-- 1 root root 1427 Oct 25 15:46 pg_stat_statements--1.4.sql -rw-r--r-- 1 root root 376 Oct 25 15:46 pg_stat_statements--1.5--1.6.sql -rw-r--r-- 1 root root 806 Oct 25 15:46 pg_stat_statements--1.6--1.7.sql -rw-r--r-- 1 root root 191 Oct 25 15:46 pg_stat_statements.control -rw-r--r-- 1 root root 449 Oct 25 15:46 pg_stat_statements--unpackaged--1.0.sql
2、修改配置文件
-- 预加载插件 shared_preload_libraries='pg_stat_statements,pg_pathman' //若数据库同时使用pg_pathman,该顺序不可改变 -- pg_stat_statements记录最大行数,默认为1000 pg_stat_statements.max = 10000 pg_stat_statements.track = all
重启数据库生效
# su - postgres $ pg_ctl -D /data/pgsql12/data restart
3、载入pg_stat_statement
-- 登录数据库,载入pg_stat_statement插件 postgres=# SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements'; //查看可用模块 -[ RECORD 1 ]-----+---------------------------------------------------------- name | pg_stat_statements default_version | 1.7 installed_version | comment | track execution statistics of all SQL statements executed postgres=# create extension pg_stat_statements; //载入模块,载入后pg_stat_statements表可正常使用 CREATE EXTENSION
二、指标含义
postgres=# select * from pg_stat_statements limit 1; -[ RECORD 1 ]-------+------------------------------------------------------------------------ userid | 10 //用户id dbid | 13547 //数据库oid queryid | 1194713979 //查询id query | SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements' //查询SQL calls | 1 //调用次数 total_time | 53.363875 //SQL总共执行时间 min_time | 53.363875 //SQL最小执行时间 max_time | 53.363875 //SQL最大执行时间 mean_time | 53.363875 //SQL平均执行时间 stddev_time | 0 //SQL花费时间的表中偏差 rows | 1 //SQL返回或者影响的行数 shared_blks_hit | 1 //SQL在在shared_buffer中命中的块数 shared_blks_read | 0 //SQL从page cache或者磁盘中读取的块数 shared_blks_dirtied | 0 //SQL语句弄脏的shared_buffer的块数 shared_blks_written | 0 //SQL语句写入的块数 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 //从磁盘写入花费的时间