kingbase SQL 调优基础-03

查看执行计划
常用的几种执行计划查
看方式。
 使用 EXPLAIN 命令查看
 使用对象管理工具查看
 在运行日志中查看

4.1.1 使用 EXPLAIN 查看
KingbaseES 中 explain 命令来查看执行计划时最常用的方式。其命令格式如下:
explain [option] statement
其中 option 为可选项,可以是以下 5 种情况的组合:
 analyze:执行命令并显示执行事件,默认 false
 verbose:显示附加信息,比如计划树中每个节点输出的字段名等,默认 false
 costs:显示执行计划的成本,默认 true
 buffers:显示缓冲区的使用信息,包括共享快、本地块和临时读写块,默认 false,前置条件是 analyze
 format:指定执行计划的输出格式,支持:TEXT、XML、JSON 或者 YAML,默认是 text

使用 explain 查询得到的仅有预期的查询计划,并没有真正执行该语句,而运行 explain analyze 语句得
到的执行计划则包含实际执行语句的 cost、时间等信息。

注:对于某些 DML 语句,如果即想运行 explain analyze 命令,又不想影响实际的数据,则可以把该命令放入一
个事务里,执行完后回滚事务:
begin;
explain analyze update student set ssex=false where sname='ada';
rollback;

4.1.3 在日志记录中查看
提供了插件 auto_explain,用于在日志中自动记录慢速语句的执行计划

根据作用范围不同,auto_explain 有以下两种方式:
 作用于当前会话
LOAD’auto_explain’;(必须是超级用户才能这样做)

 作用于全局
设置 kingbase.conf 中的 shared_preload_libraries 参数为‘auto_explain’

4.2 阅读执行计划
4.2.1 主要内容
执行计划里每个节点主要内容包括:
 执行动作,及其附加条件,比如索引扫描,索引条件等
 估算成本:启动 cost、总体 cost
 估计返回的行数和平均宽度
 如果开启了 Analyze 选项,还会返回:
– 实际成本:启动 cost、总体 cost
– 实际返回的行数,节点循环执行次数

我们以下例来说明,执行计划输出结果各部分的内容:
explain analyze select * from student where sname='ada';
QUERY PLAN
---------------------------------------------------------------
Index Scan using idx_stu on student (cost=0.14..8.15 rows=1 width=10)(actual time=0.074..0.074 rows=0 loops=1)
Index Cond: (sname = 'ada'::text)
Planning Time: 0.122 ms
Execution Time: 0.245 ms
(4 行记录)

1. 执行动作:Index Scan using idx_stu on student
 Index Scan:表示索引扫描
 Idx_stu:使用的索引名
 Student:访问的表名
整句话表示:访问 student 表的时候,使用的是索引扫描,扫描的索引是 idx_stu。

2. 估算成本:(cost=0.14..8.15 rows=1 width=10)
 Cost=0.14..81.5:第一个数 0.14 表示启动成本,也就是说返回第一行需要多少 cost。第二个数值
81.5 表示返回所有的数据的成本。这两个数值用.. 分开。
 Rows=1:表示该查询会返回 1 行记录。
 Width=10:表示每行平均宽度为 10 字节。
需要注意的是:在执行计划里,每一步的 cost 值都传给了上一层,也就是说每一个 cost 值代表的是在此步以下所有操作的代价总和。启动成本是第一行输出开始前的成本,比如进行排序的成本。

3. 实际成本:(actual time=0.074..0.074 rows=0 loops=1)
 Actural time=0.074..0.074:表示实际的启动时间为 0.074,实际的运行时间也为 0.074。
 Rows=0:表示实际查询返回了 0 行记录(没有查询到)。
 Loops=1:表示该索引扫描只执行了 1 次。
这行信息为带有 Analyze 的 explain 语句特有。可以看出实际成本跟估算成本会有一定的偏差。那是因为估算成本是优化器根据统计信息估算出来的一个结果,而有时统计信息并不完全能够反映真实的情况。
为了让统计信息更准确,可以运行 Analyze 命令来更新整个数据库、某张表或者某个字段的统计信息,然后再次执行 explain 将得到一个更好的结果。

4. 索引条件:Index Cond: (sname = ’ada’::text)
该句表示当前执行的索引扫描(Index Scan)使用的索引条件为:sname = ’ada’::text

5. 计划和执行时间:Planning Time: 0.122 ms, Execution Time: 0.245 ms
这行信息为带有 Analyze 的 explain 语句特有。表示生成执行计划用时 0.122ms,真正执行查询用时 0.245ms。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值