微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL 使用anto_explain自动记录超时SQL的执行计划

1. auto_explain 模块简单介绍
  auto_explain 模块能够自动记录慢查询语句的执行计划,而不需要手工执行 Explain 命令,在比较大的业务系统中,这个模块专门用来跟踪尚未优化的查询sql

2. auto_explain 模块启用
  如果已经编译并安装了 auto_explain 模块,只要配置参数 shared_preload_libraries 和 custom_variable_classes 参数,如下所示。

3. postgresql.conf 典型参数配置
shared_preload_libraries = ‘auto_explain’
custom_variable_classes = ‘auto_explain’
auto_explain.log_min_duration = ‘0’

备注:
  auto_explain.log_min_duration 参数在配置文件里 Postgresql.conf 没有,需要手工添加,这个参数用来控制执行时间在指定值以上的sql的执行计划被记录。参数修改后,需要重启 Postgresql 服务。
  auto_explain.log_min_duration 设置成了 0,表示记录所有语句的PLAN,这是为了测试需要,在生产情况时,可以根据需求设置,一般设置成 1000ms。
  0 表示记录所有的语句的PLAN,认什为 -1,表示不记录语句的PLAN。

4. 创建表测试下

postgres=# create table tb3(id integer,name character varying);
CREATE TABLE
postgres=# insert into tb3 select generate_series(1,100000),'john';
INSERT 0 100000
postgres=# create index idx_tb3_id on tb3 using btree (id);
CREATE INDEX
postgres=# select * from tb3 where id=10;
 id | name ----+------
 10 | john
(1 row)

查看cvs日志

2015-04-20 00:07:07.378 PDT,2343,553469d3.927,13,2015-04-19 19:52:03 PDT,0,LOG,00000,"checkpoint starting: time",""
2015-04-20 00:07:07.619 PDT,14,"checkpoint complete: wrote 3 buffers (0.0%); 0 transaction log file(s) added,0 removed,0 recycled; write=0.209 s,sync=0.005 s,total=0.240 s; sync files=3,longest=0.003 s,average=0.001 s",""
2015-04-20 00:27:07.923 PDT,"postgres",2350,"[local]",553469da.92e,20,"SELECT",2015-04-19 19:52:10 PDT,2/21,"duration: 24.106 ms plan: Query Text: select * from tb3 where id=10; Index Scan using idx_tb3_id on tb3 (cost=0.29..8.31 rows=1 width=9) Index Cond: (id = 10)","psql"

当执行查询后,PG的日志里记录了语句的PLAN具体信息。

参考:http://francs3.blog.163.com/blog/static/405767272011791573867/

原文地址:https://www.jb51.cc/postgresql/195245.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐