执行计划的查看经典版
上面的SQL*Net roundtrips to/from client ---表示通过网络(SQL*Net)往返(round)几次的意思;
上面这句表示服务器到客户端发送了多少字节。
上面这句表示客户端到服务器端发送了多少字节。
redo size----表示产生的日志多少(普通的查询是不产生日志的,但是有些特殊查询也是产生日志的)。
上面表示的是递归调用。oracle在执行select count(*) from tt这条sql语句时,oracle还要执行其他的sql,用来解释select count(*) from tt这条sql(我们写的sql语句只是一个文本的,但oracle需要对你写的sql语句进行编译,使之成为计算机识别的符号才能执行)。
oracle是怎么解释你写的sql语句呢?其实oracle是通过查数据字典、元数据来解释的,这时是需要cpu资源:
1) 判断对象(表)是否存在
2) 判断是否权限访问
3) 判断sql是否与语法错误
上面这三条sql语句的解释都称之为递归调用。
上面的consistent gets和physical reads是真正执行sql语句消耗的资源。
其中,
consistent gets,表示逻辑读,即从内存中访问数据块的次数。如果一个数据块访问了9087次,那么逻辑读就是9087;如果每一个数据块只访问过一次,但访问了9087个块,那么逻辑读也是9087。
其实我们优化sql语句的目的就是降低consistent gets。
physical reads,表示物理读。说明内存太小了,需要访问的数据块完全没有在内存中保留下来,还得需要从磁盘来读取所需要的数据块。这意味这条sql语句访问时,data buffer 空间不够,不能把这个表涉及到数据块全部放在data buffer cache中来。
执行计划查看的规则:
1、首先查看缩进最靠右侧的执行计划 ------>最先执行
2、同等级缩进的执行计划,从上倒下执行
3、父子关系,如果有孩子先执行孩子,在执行父亲
执行计划的案例分析
第一个案例
上面的sort aggregate是排序聚合的意思,即表示的就是count()这个函数的动作。
select statement表示把最后的结果返回给用户。
第二个案例
从上图可看出,此计划是一个二叉树,有两个分支,分别为上图的1和2
小知识:一个表的大小由哪些因素来决定呢?
假设一个表很大,可能是这个表有很多字段,每个字段都很宽导致的表大;另一个可能是这个表的数据量很大。
小知识:一个表里面的字段不能太多,oracle允许一个表里面最多能达到一千个字段。但是最好一张表不要超过256个字段。
小知识:我们在修改一个字段的数据时,oracle会把这个字段所在的行锁住,其他人就不再能修改这行的所有字段,直到这个人把行锁释放为止。所以一个表不要把字段设置的太多,否则行锁锁表的面积就会很大,从而导致数据库瓶颈。
下图演示的就是一个人在修改某一行的一个字段的值时,这行数据就被锁住,别人就操作不了这行数据了。所以如果一个表的字段越多,那么发生行锁的几率也就越大。因为可能很多人都要修改这行数据的不同字段,从而导致行锁。
查看执行计划的步骤:
1)
查看缩进最靠右侧的执行计划是6和7
2)
执行计划同一缩进计划,按照从上倒下的顺序执行,执行顺序为上图所示,先执行1在执行2
3)
按照执行计划规则,先执行孩子,在执行父亲,上图所示:6 、7是5的孩子
所以先执行6和7再执行5,执行顺序为6、7、5
4)
上图所示 5和 8 是同一等级缩进,先执行5 再执行8。 3)说明5已经执行完
执行8, 8为父亲,下面还有孩子,所以先执行孩子 9,再执行8
执行顺序为 6、7、5、9、8
5)
上图所示:6、7、5、9、8已经执行完。4是6、7、5、9、8的父亲,孩子执行完,执行父亲,所以在执行4,顺序为 6、7、5、9、8、4
6)
上图所示:4和10 是同一等级缩进,4执行完成,在执行10
7)
上图所示:10 是11、12的父亲,所以先执行孩子,11 和12 是同一等级,按照从上倒下顺序执行,先执行11,在执行12 ,但是12又是13的父亲,所以先执行13,在执行12
以上顺序为:6、7、5、9、8、4、11、13、12、10
上图所示:按照执行计划原则,缩进最靠右侧的先执行,执行为 3、2、1
综上图解:
执行计划顺序为
6、7、5、9、8、4、11、13、12、10、3、2、1、0
综上所述图解:
下面我们就可以将执行计划画成一个二叉树。
hash value
上面表示set autot trace显示的执行计划,其实是从v$sql_plan里面构造出来的。
v$sql_plan视图中,上面这两列可以轻松的看出父子关系。
附件列表
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-1628909/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28916011/viewspace-1628909/