ITPub博客

首页 > 数据库 > Oracle > oracle绑定变量窥测

oracle绑定变量窥测

原创 Oracle 作者:guoyongcheng 时间:2016-03-23 23:03:49 0 删除 编辑
目标sql随着where后边条件的selectivity和结果集行数cardinality的不同,执行计划可能随之发生变化。
那么这种情况下oracle是如何选择执行计划的呢?
1、使用绑定变量窥探
2、对于不使用绑定变量窥探的,默认可选择率为5%

绑定变量窥探是在oracle 9i中引入的,隐含参数为_OPTIM_PEEK_USER_BINDS。默认值为true
当绑定变量被启用后,sql每次硬解析的时候都会去探测变量的值,并以这些值为标准制定执行计划。一旦值被确定了,执行计划也就被固定了下来。所以执行计划完全依赖于第一次执行计划时候的变量取值。
清楚指定cursor的执行计划:
select sql_text,sql_id,address,hash_value,version_count,executions,loads from v$sqlarea where sql_text like 'select count(*) from t3%';
exec sys.dbms_shared_pool.purge('address,hash_value,','c');  --清楚指定的cursor
对于文本字符型变量,绑定变量是有分级的,不同长度的变量自符,也会导致生成不同的执行计划
取得绑定变量的值:
v$sql_bind_capture如果这个中查不到,可以到dba_hist_sqlstat或dba_hist_sqlbind中查询。
这个视图中只包含where后边的绑定变量值,并且15分钟间隔捕获,对于insert 并不会捕获。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26357044/viewspace-2062847/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2015-06-11

  • 博文量
    2
  • 访问量
    9653