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窥视到值而后根据直方图来进一步精确定位其执行计划,
而如果后面的绑定变量的值产生的结果集变化很大,那么自适应游标就可以通过比对逻辑读来调整其执行计划
而不至于一直用之前的计划;
--》直方图如果没有开启,自适应游标也是发挥不出来的,也就是失效的;
出现在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窥视到值而后根据直方图来进一步精确定位其执行计划,
而如果后面的绑定变量的值产生的结果集变化很大,那么自适应游标就可以通过比对逻辑读来调整其执行计划
而不至于一直用之前的计划;
--》直方图如果没有开启,自适应游标也是发挥不出来的,也就是失效的;
相关文章推荐
- 绑定变量让sql重新硬解析的方法及11g自适应游标
- 直方图;绑定变量窥探;自适应游标
- 【Oracle 优化器】自适应游标共享(Adaptive Cursor Sharing)功能
- 游标变量、动态sql及变量绑定的使用
- 160.Oracle数据库SQL开发之 SQL优化——使用绑定变量
- 有关pl/sql的游标, 文本拼接和绑定变量使用小心得.
- 在PL/SQL中使用游标、动态sql和绑定变量的小例子
- 在php中使用绑定变量的方法(Oracle SQL共享的机制)
- Oracle PL/SQL开发基础(第二十六弹:游标变量)
- 游标变量、动态sql及变量绑定的使用
- 基础知识之绑定变量窥视----BIND PEEKING
- 将sqldatasource中的数据直接绑定到变量
- PL/SQL中游标和游标变量的使用(转)
- 与大家共享 SQL优化,编写高效SQL 实战经验
- 绑定变量窥视
- 晶晶实验十五 共享SQL区、私有SQL区与游标 篇
- MS SQL入门基础:SQL 变量
- 【转】T-SQL的游标变量
- PL/SQL Developer插件编程的绑定变量问题
- 与大家共享 SQL优化,编写高效SQL 实战经验