文章目录
- 一、具体方法
- 二、解释
- 2.1 explain的4种用法
- 2.2 auto explain的用法
- 2.3 explain analyze 执行计划解读
一、具体方法
方法:通过查看pg_stat_activity视图,查找耗时长的慢SQL语句,然后通过查看执行计划分析慢的原因,从而确定优化方案
1、与数据库建立连接1,并执行慢的存过
2、与数据库建立连接2,并通过下面语句观察当前正在执行的存过名称和语句。
select pid,application,name,query,backend_start,query_start,sysdate-query_start as runtime,application_name from pg_stat_activity where state='active' and usename not in ('omm','rdsadmin') and query like '%<schema.objectname>%' and query not like '%select pid,application,name,query,backend_start,query_start%' order by 4 desc;
3、查看执行计划
通过 explain 命令查看执行计划
explain <SQL>
查看执行计划及耗时
explain analyze <SQL>
常见算子的名称
operation:算子名称
E-rows:算子扫描涉及的行数
A-time:实际执行耗时
A-rows:实际扫描的行数
常见表扫描方式:
Seq Scan:全表扫描
Bitmap index Scan:使用位图索引抓取数据页
Index Scan using index_name:使用简单索引搜索
二、解释
explain 用于显示SQL语言的执行计划,以及执行计划中各组成部分开销和执行时间,是用来分析SQL级的性能问题。
2.1 explain的4种用法
序号 | 用法 | 说明 |
---|---|---|
1 | explain SQL | SQL并不会真的执行,只生成执行计划 |
2 | explain analyze SQL | SQL会真实执行,如果用户不想对实际数据造成更新,可以在事务中执行并回滚 |
3 | explain performance SQL | SQL真实执行,结果比2更详细 |
4 | auto explain | 输出多,但是开销高,使用方法可以见下 |
2.2 auto explain的用法
1、在XSHELL使用sql连接工具psql,在数据库内执行
set enable_auto_explain =YES;
set auto_explain_level=Notice;
2、在XSHELL中,启动文件-》日志-》启动。查看日志,观察duration大的SQL,以及入参等。
2.3 explain analyze 执行计划解读
一般针对真实开销高(actual time)的算子节点进行优化,如果认为优化器对SQL的访问路径选择有误,需要看理论评估值是否异常。
输出位树形结构,节点按列缩进,同级节点一般为从上往下执行,不同级节点,右边节点为左边节点的组成部分,同级节点时间不累加。
详细解释可以看这篇,总结的很好
Postgres执行计划EXPLAIN使用详解