您的位置:首页 > 数据库

SQL优化【基础07】 - 绑定变量窥视与自适应游标共享

2014-09-01 22:28 369 查看
1.绑定变量窥视(bind peeking)出现的背景

出现在ORACLE9I之后,在此之前ORACLE是按一定比例来预估结果集,在日常的应用中ORACLE

发现有些时候这个比例并不是最优的,于是引入了这项技术来进一步的优化;

2.什么是窥视?

var a number;

exec :a :=88;

select status from t1 where object_id=:a;

在第一次执行时Oracle会去看下这个:a的实际值88,然后其它参数来预估返回的结果集值,以

此来决定采用的执行计划 ;



3.此项技术缺点

只peek一次,后续直接使用此游标而不论传入的变量值是否存在数据倾斜的情况;

比如:第一次走全表,而后就一直全表扫,即使有时是要走索引的;

4.为了弥补bind peek不足,引入了--自适应游标(Adaptive Cursor Sharing)

技术本质:通过前后游标执行的参数buffer gets(及结果集,选择率)来判断是否进行硬解析,以满足数据倾斜变量值的计划;

5.Adaptive Cursor Sharing缺点--世间不存在完美(no perfect)

1.增加硬解析的次数

2.增加解析时寻找匹配游标的时间

3.绑定变量的个数<=14,否则无效,如下官方说明(from performance tuning)

Adaptive cursor sharing is enabled for the database by default and cannot be disabled.

Note that adaptive cursor sharing does not apply to SQL statements containing more than 14 bind variables

6.与此相关的应用问题举例

1.没开直方图,数据存在倾斜,第一次解析时的计划不通用,或者跟之前业务较通用的计划差异大,业务上来了就会发现慢了;

2.在高并发量较大时候,一般采用临时的baseline,sql profile固定计划处理;

可参见文档tunning document

7.自适应游标与直方图的关系

--》自适应游标产生于11g,而直方图11G之前就有了,这其实也意味着自适应游标作为直方图的一种补充和完善;

这怎么理解?直方图是第一次硬解析的时候,ORACLE窥视到值而后根据直方图来进一步精确定位其执行计划,

而如果后面的绑定变量的值产生的结果集变化很大,那么自适应游标就可以通过比对逻辑读来调整其执行计划

而不至于一直用之前的计划;

--》直方图如果没有开启,自适应游标也是发挥不出来的,也就是失效的;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: