收藏本站

人工智能培训机构,上海涛德,算法工程师,数据科学家高端培训机构-上海涛德

Oracle Database 12c SQL优化器新功能Adaptive Plans(自适应执行计划) ...

2013-6-26 22:50| 查看: 2242| 评论: 0

摘要: Oracle Database 12c正式发布,而且已经在OTN网站可以下载了。那么Oracle Database 12c有哪些新功能了。下面我们着重聚合Oracle 12cSQL优化器的Adaptive Plans(自适应执行计划)假如我们要执行以下SQL查找符合条件 ...

Oracle Database 12c 正式发布,而且已经在OTN网站可以下载了。

那么Oracle Database 12c有哪些新功能了。下面我们着重聚合Oracle 12c SQL优化器的Adaptive Plans(自适应执行计划)

假如我们要执行以下SQL 查找符合条件的行

可能的Join执行计划有Nested Loops, Hash Join

 

假设我们的实际数据量比较大,但是优化器统计记录的是表比较少。

如果用Explain plan命令显示预估执行计划如下:

很明显走了预估执行计划走了 Nested Loops方式。

 

 

但是如果我们在语句执行之后。用dbms_xplan显示cursor 实际执行计划可以看到以下的内容:

很明显它走了Hash Join 符合我们的实际情况。

 

是什么原因导致优化器变聪明了?答案就是Oracle 12c 引入了Adaptive Plans 功能

 

如果我们在display_cursor的时候加入’adaptive’参数,结果如下

 

执行计划中加”-”表示没有执行的非活的的执行计划。

 

注意其中的 “STATISTICS COLLECTOR” 它表示Oracle 优化器在最开始试图采用Nested Loops方式执行前,先读取了ORDER_ITEM2的行记录,如果在读取行数达到一定的阀值。那么Oracle优化器认为要Join的表的数据量过大。应该考虑采用Hash Join

 

一个完整的流程如下:

用户语句发布后

2优化器基于现有统计生成一个Nested Loops执行计划,同时还有可选的子计划 Hash Join 也存放到cursor

3 Oracle在执行Nested Loops之前先读取要Join表的行。这些行会暂存内存中

当表的行很少,做出决策依旧采用Nested Loops

当表的行达到一定阀值,做出决策采用Hash Join 子计划

<点击:上海涛德Oracle OCM认证及BI商业智能课程>|人工智能培训-上海涛德 ( 沪ICP备14006824号 )|网站地图   My title page contents

GMT+8, 2019-7-18 21:59 , Processed in 0.110672 second(s), 15 queries , Gzip On.

回顶部