安装过程如下:进入安装包的contrib/pg_stat_statements目录,执行编译和安装动作:
1 [root@server pg_stat_statements]# pwd 2 /soft/postgresql-9.1.2/contrib/pg_stat_statements 3 [root@server pg_stat_statements]# make && make install 4 make: `all' に対して行うべき事はありません. 5 /bin/mkdir -p '/usr/local/pgsql/lib' 6 /bin/mkdir -p '/usr/local/pgsql/share/extension' 7 /bin/sh ../../config/install-sh -c -m 755 pg_stat_statements.so '/usr/local/pgsql/lib/pg_stat_statements.so' 8 /bin/sh ../../config/install-sh -c -m 644 ./pg_stat_statements.control '/usr/local/pgsql/share/extension/' 9 /bin/sh ../../config/install-sh -c -m 644 ./pg_stat_statements--1.0.sql ./pg_stat_statements--unpackaged--1.0.sql '/usr/local/pgsql/share/extension/'
在data/postgresql.conf中,进行配置:
shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.max = 1000 pg_stat_statements.track = all
shared_preload_libraries = 'pg_stat_statements',表示要在启动时导入pg_stat_statements 动态库。
pg_stat_statements.max = 1000,表示监控的语句最多为1000句。
pg_stat_statements.track = top,表示不监控嵌套的sql语句。
pg_stat_statements.track_utility = true,表示对 INSERT/UPDATE/DELETE/SELECT 之外的sql动作也作监控。
pg_stat_statements.save = true,表示当postgresql停止时,把信息存入磁盘文件以备下次启动时再使用。
重新启动 postgresql,创建sql语句:
create extension pg_stat_statements;
查询哪些sql语句执行效率慢:
- SELECT query, calls, total_time, (total_time/calls) as average ,rows,
- 100.0 * shared_blks_hit /nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
- FROM pg_stat_statements
- ORDER BY average DESC LIMIT 10;
统计结果一直都在,重启也不会清零,那么统计结果如何清零重新统计呢?执行下面SQL即可:
- select pg_stat_statements_reset() ;
表 F-20. pg_stat_statements 字段代表的含义
名字 | 类型 | 参考 | 描述 |
---|---|---|---|
userid | oid | pg_authid.oid |
执行该语句的用户的OID |
dbid | oid | pg_database.oid | 执行该语句的数据库的OID |
query | text | 有代表性的语句的文本 (多达 track_activity_query_size 字节) | |
calls | bigint | 执行的次数 | |
total_time | double precision | 该语句花费的总时间,以毫秒计 | |
rows | bigint | 该语句恢复或影响的行的总数 | |
shared_blks_hit | bigint | 该语句命中的共享块缓存的总数 | |
shared_blks_read | bigint | 该语句读取的共享块的总数 | |
shared_blks_dirtied | bigint | 该语句弄脏的共享块的总数 | |
shared_blks_written | bigint | 该语句写入的共享块的总数 | |
local_blks_hit | bigint | 该语句命中的本地块缓存的总数 | |
local_blks_read | bigint | 该语句读取的本地块的总数 | |
local_blks_dirtied | bigint | 该语句弄脏的本地块的总数 | |
local_blks_written | bigint | 该语句写入的本地块的总数 | |
temp_blks_read | bigint | 该语句读取的临时块的总数 | |
temp_blks_written | bigint | 该语句写入的临时块的总数 | |
blk_read_time | double precision | 该语句读取块花费的总时间,以毫秒计 (如果启用了track_io_timing,否则为0) | |
blk_write_time | double precision | 该语句写入块花费的总时间,以毫秒计 (如果启用了track_io_timing,否则为0) |