centos 6.8 + postgresql 9.6 + pg_stat_statements
pg_stat_statements模块提供了一种跟踪执行的所有SQL语句的统计信息的方法。
这个模块必须改写配置文件postgresql.conf中的shared_preload_libraries变量,这是因为他需要额外的共享内存。
同时也意味着需要重启服务。
当pg_stat_statements被载入时,它会跟踪该服务器 的所有数据库的统计信息。
该模块提供了一个视图 pg_stat_statements 以及函数 pg_stat_statements_reset 和pg_stat_statements用于访问和操纵这些统计信息。
这些视图 和函数不是全局可用的,但是可以用CREATE EXTENSION pg_stat_statements 为特定数据库启用它们。
配置参数
pg_stat_statements.max (integer)
pg_stat_statements.max是由该模块跟踪的语句的最大数目(即pg_stat_statements视图中行的最大数量)。如果观测到的可区分的语句超过这个数量,最少被执行的语句的信息将会被丢弃。默认值为 5000。这个参数只能在服务器启动时设置。
pg_stat_statements.track (enum)
pg_stat_statements.track控制哪些语句会被该模块计数。指定top可以跟踪顶层语句(那些直接由客户端发出的语句),指定all还可以跟踪嵌套的语句(例如在函数中调用的语句),指定none可以禁用语句统计信息收集。默认值是top。 只有超级用户能够改变这个设置。
pg_stat_statements.track_utility (boolean)
pg_stat_statements.track_utility控制该模块是否会跟踪工具命令。工具命令是除了SELECT、INSERT、 UPDATE和DELETE之外所有的其他命令。默认值是on。 只有超级用户能够改变这个设置。
pg_stat_statements.save (boolean)
pg_stat_statements.save指定是否在服务器关闭之后还保存语句统计信息。如果被设置为off,那么关闭后不保存统计信息并且在服务器启动时也不会重新载入统计信息。默认值为on。这个参数只能在postgresql.conf文件中或者在服务器命令行上设置。
该模块要求与pg_stat_statements.max成比例的额外共享内存。注意只要该模块被载入就会消耗这么多的内存,即便pg_stat_statements.track被设置为none。
这些参数必须在postgresql.conf中设置。典型的用法可能是:
vi postgresql.conf
shared_preload_libraries = ‘pg_stat_statements’
pg_stat_statements.max = 10000
pg_stat_statements.track = all
检查 pg_stat_statements
/usr/pgsql-9.6/lib/pg_stat_statements.so
/usr/pgsql-9.6/share/extension/
-rw-r--r-- 1 root root 1246 Aug 10 10:15 pg_stat_statements--1.0--1.1.sql
-rw-r--r-- 1 root root 1336 Aug 10 10:15 pg_stat_statements--1.1--1.2.sql
-rw-r--r-- 1 root root 1454 Aug 10 10:15 pg_stat_statements--1.2--1.3.sql
-rw-r--r-- 1 root root 345 Aug 10 10:15 pg_stat_statements--1.3--1.4.sql
-rw-r--r-- 1 root root 1427 Aug 10 10:15 pg_stat_statements--1.4.sql
-rw-r--r-- 1 root root 191 Aug 10 10:15 pg_stat_statements.control
-rw-r--r-- 1 root root 449 Aug 10 10:15 pg_stat_statements--unpackaged--1.0.sql
创建 pg_stat_statements extension
create extension pg_stat_statements;
确认 pg_stat_statements
mondb=# \dx
List of installed extensions
Name | Version | Schema | Description
--------------------+---------+------------+--------------------------------------------------------------
dblink | 1.2 | public | connect to other PostgreSQL databases from within a database
pg_stat_statements | 1.4 | public | track execution statistics of all SQL statements executed
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(3 rows)
查询 pg_stat_statements
SELECT query,
calls,
total_time,
rows,
100.0 * shared_blks_hit /nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements
ORDER BY total_time DESC LIMIT 5;
可以清空pg_stat_statements,从头开始
SELECT pg_stat_statements_reset();
select *
from pg_class pc
where 1=1
and pc.relkind in ('r','v')
and pc.relname like 'pg_stat%'
order by pc.relname
;