ORACLE绑定变量窥视有什么作用?

来源:互联网 发布:淘宝模板代码制作 编辑:程序博客网 时间:2024/04/30 11:16
ORACLE绑定变量窥视有什么作用?

在OLTP系统中绑定变量性能的提高很明显,这个大家都清楚,但是绑定变量有时也会产生一些不好的执行计划,特别是需要直方图的列。
从ORACLE9i开始提供了绑定变量窥视的功能,就是在ORACLE第一次解析SQL时会将变量的真实值代入产生执行计划,以后对所有的同样的绑定变量SQL都采用这个执行计划了。
如果第一次的真实值恰好是比较特殊的值,那这将严重影响产生的执行计划和以后的执行效率.
如果第一次的真实值是比较普通的值,产生的计划还是一样,那个这个窥视起什么作用呢?
 
对于oracle11g提供新的特性自适应游标共享(Adaptive Cursor Sharing),对于一个同样绑定变量的SQL可以有多个执行计划,从而达到动态优化执行计划的作用,这个还没有真正试过。
不过根据描述感觉oracle11g要实现这个效果对每个SQL的解析及内存都增加了,另外以后对于同样的SQL要增加直方图的判断,执行计划CUBE的判断,如果结果不一样那就优化了,但如果判断的结果一样,那等于重复做了这些工作,感觉实际应用中99.9%的结果是一样的,所以11g这样做增加内存增加每个SQL的判断时间值不值,特别是对于高并发的业务系统,大部份的SQL的执行时间都很小。
 
对上都只是我的假想,不过感觉绑定变量窥视的作用的真的不明显,在OLTP系统中对于特殊值还是不用绑定变量更好,在OLAP中如果特殊值很多建议不要用绑定变量更好。11g的改进不太清楚效果,不过感觉成本比较高。 
2008-03-21
MKing