cursor_sharing

OLTP系统中,我们总是希望使用 绑定变量sql语 句共享在library cache中,Oracle将根据LRU算法将该语句的相关信息保存在library cache中,这样只有在sql语句第一次被加载时会发生hard parse,之后如果sql语句在library cache中,将会发生fast parse或者soft parse,就不用每次都重新生成解析树和执行计划。
    然而,在某些情况下,我们可能又不想使用绑定变量。比如:如果sql语句的where条件之后的列值在表中分布非常不均匀,在条件是某些值的情况下走全表 扫描成本比较低,而另外一些情况下走索引成本比较低,在使用绑定变量的情况下,由于bind peeking技术,在fast parse或soft parse的情况下将会使用第一次硬解析时的执行计划而不会生成新的执行计划,这样将使某些查询陷入困境。
    下文中介绍的hints将能够在 cursor_sharing=similar的情况下强制不使用绑定变量:

1. 正常情况下 如果启用了similar ,sql语句会强制使用绑定变量

session 1

SQL>alter session set cursor_sharing=similar;

会话已更改。

SQL>select * from test where id=1;

        ID
----------
         1

SQL>select * from test where id=2;

        ID
----------
         2

session 2

SQL>select sql_text,hash_value from v$sqlarea where sql_text like 'select * fro
m test where id%' order by first_load_time desc;

SQL_TEXT
--------------------------------------------------------------------------------

HASH_VALUE
----------
select * from test where id=:"SYS_B_0"
 345325898

 

2.如果使用了hint CURSOR_SHARING_EXACT,将强制不使用绑定变量

session 1

SQL>select /*+ CURSOR_SHARING_EXACT */ * from test where id=1;

        ID
----------
         1

SQL>select /*+ CURSOR_SHARING_EXACT */ * from test where id=2;

        ID
----------
         2

SQL>select /*+ CURSOR_SHARING_EXACT */ * from test where id=3;

        ID
----------
         3

SQL>

session 2

SQL>select sql_text,hash_value from v$sqlarea where sql_text like 'select /*+ C
URSOR_SHARING_EXACT */ * from test where id%' order by first_load_time desc;

SQL_TEXT
--------------------------------------------------------------------------------

HASH_VALUE
----------
select /*+ CURSOR_SHARING_EXACT */ * from test where id=3
1339598962

select /*+ CURSOR_SHARING_EXACT */ * from test where id=2
1720851874

select /*+ CURSOR_SHARING_EXACT */ * from test where id=1
3085093526

    另外,在cursor_sharing=force的情况下,使用该hints也会强制不使用绑定变量。

(痴情甲骨文http://space.itpub.net/14130873)

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

转载于:http://blog.itpub.net/104446/viewspace-548864/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值