Bind Peeking是Oracle 9i中引入的新特性,一直持续到Oracle 10g R2。它的作用就是在SQL语句硬分析的时候,查看一下当前SQL谓词的值
,以便生成最佳的执行计划。而在oracle 9i之前的版本中,Oracle 只根据统计信息来做出执行计划。
一、绑定变量窥探
使用SQL首次运行时的值来生成执行计划。后续再次运行该SQL语句则使用首次执行计划来执行。
影响的版本:Oracle 9i, Oracle 10g
对于绑定变量列中的特殊值或非均匀分布列上的绑定变量会造成非高效的执行计划被选择并执行。
要注意的是,Bind Peeking只发生在硬分析的时候,即SQL被第一次执行的时候,之后的变量将不会在做peeking。我们可以看出,Bind
peeking并不能最终解决不同谓词导致选择不同执行计划的问题,它只能让SQL第一次执行的时候,执行计划选择更加准确,并不能帮助OLAP
系统解决绑定变量导致执行计划选择错误的问题。这也是OLAP不应该使用绑定变量的一个原因。
更确切地说,绑定变量窥探是在SQL解析的物理阶段,查询优化器将会窥探绑定变量的值并将其作为字面量来使用。即ORACLE首次解析
SQL时会将变量的真实值代入产生执行计划,后续对所有使用该绑定变量SQL语句都采用首次生存的执行计划。如此这般?那性能究竟如何?
结果是并非最佳的执行计划的使用。此问题在Oracle 11g中得以解决。
请参考:Oracle自适应共享游标
二、示例绑定变量窥探
1、创建演示环境
2、未使用绑定变量情形下SQL语句的执行计划
3、使用绑定变量情形下的执行计划
三、总结
从上面的演示可以,由于绑定变量窥探特性,对于后续生成的执行计划,不仅套用了首次生成的执行计划,而且执行计划中的Row,Bytes,
Cost(%CPU)等都与首次生存执行计划得值相同。由此可知,尽管可以使用绑定变量解决OLTP系统中大量重复SQL的反复解析的问题。但绑定变量
可能会导致SQL语句选择非最佳的执行计划。尤其是对于存在数据倾斜的列,且生成了直方图更不宜于使用绑定变量。在Oracle 11g 中,自适
应特性从一定程度解决了绑定变量窥探所导致的问题。
四、延伸参考
Oracle自适应共享游标
绑定变量及其优缺点
父游标、子游标及共享游标
dbms_xplan之display_cursor函数的使用
dbms_xplan之display函数的使用
执行计划中各字段各模块描述
分享到:
相关推荐
在Java中实现Oracle变量的绑定方法 .doc 在Java中实现Oracle变量的绑定方法 .doc
Java中Oracle操作绑定变量使用用户工具模块解决方案
oracle 数据库的绑定变量特性及应用
绑定变量的目的和命名用方法
Oracle绑定变量窥视功能深度分析.pdf
也谈oracle 数据库的绑定变量特性及应用,很好的资料!
绑定变量 变量绑定是OLTP系统中一个非常值得关注的技术。良好的变量绑定会使OLTP系统数据库中的SQL 执行速度飞快,内存效率极高;不使用绑定变量可能会使OLTP 数据库不堪重负,资源被SQL解析严重耗尽,系统运行...
结合实例说明Oracle数据库绑定变量特性及应用。合理的使用绑定变量,可以大大提高SQL性能
linux-oracle环境变量及自启动脚本
Oracle数据库的绑定变量特性及应用.pdfOracle数据库的绑定变量特性及应用.pdfOracle数据库的绑定变量特性及应用.pdfOracle数据库的绑定变量特性及应用.pdfOracle数据库的绑定变量特性及应用.pdfOracle数据库的绑定...
查找未使用绑定变量sql.sql
Oracle脚本中变量使用示例。
Oracle 中关于变量绑定的解释说明,还是蛮清楚的学习资料。
oracle 11g环境变量配置 添加一个环境变量, 名为TNS_ADMIN, 值为tnsnames.ora文件所在路径。 比如我的本机为:D:\instantclient_11_2\network\admin 4、设置ORACLE的语言,添加环境变量NLS_LANG ,值为SIMPLIFIED ...
oracle biee开发中遇到的变量使用方法
Oracle_数据库的绑定变量特性及应用终稿.pdf
oracle变量的总结
oracle变量绑定[文].pdf
对于Oracle学习者用处很大,是关于Oracle变量及在存储过程、触发器及函数的使用