概述
上次介绍了pg_stat_statements模块如何安装,下面主要介绍怎么用这个模块来搞事情了~
分析TOP SQL
查询pg_stat_statements视图,可以得到统计信息。SQL语句中的一些过滤条件在pg_stat_statements中会被替换成变量,减少重复显示的问题。pg_stat_statements视图包含了一些重要的信息。
例如:
1)SQL的调用次数,总的耗时,最快执行时间,最慢执行时间,平均执行时间,执行时间的方差(看出抖动),总共扫描或返回或处理了多少行;
2)shared buffer的使用情况,命中,未命中,产生脏块,驱逐脏块;
3)local buffer的使用情况,命中,未命中,产生脏块,驱逐脏块;
4)temp buffer的使用情况,读了多少脏块,驱逐脏块;
5)数据块的读写时间。
1、最耗IO SQL,单次调用最耗IO SQL TOP 5
select userid::regrole, dbid,(blk_read_time+blk_write_time)/calls "io",query from pg_stat_statements order by (blk_read_time+blk_write_time)/calls desc limit 5;
2、总最耗IO SQL TOP 5
select userid::regrole, dbid,(blk_read_time+blk_write_time) "IO",query from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 5;
3、最耗时 SQL,单次调用最耗时 SQL TOP 5
select userid::regrole, dbid,mean_time,query from pg_stat_statements order by mean_time desc limit 5;
4、总最耗时 SQL TOP 5
select userid::regrole, dbid, total_time,query from pg_stat_statements order by total_time desc limit 5;
5、响应时间抖动最严重 SQL
select userid::regrole, dbid, stddev_time,query from pg_stat_statements order by stddev_time desc limit 5;
6、最耗共享内存 SQL
select userid::regrole, dbid,(shared_blks_hit+shared_blks_dirtied), query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 5;
7、最耗临时空间 SQL
select userid::regrole, dbid,temp_blks_written,query from pg_stat_statements order by temp_blks_written desc limit 5;
8、重置统计信息
pg_stat_statements是累积的统计,如果要查看某个时间段的统计,需要打快照,用户也可以定期清理历史的统计信息,通过调用如下SQL
select pg_stat_statements_reset();
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~