ITPub博客

首页 > Linux操作系统 > Linux操作系统 > cursor_sharing

cursor_sharing

原创 Linux操作系统 作者:linyuze 时间:2009-02-12 15:29:56 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: histogram与10053(zt)
请登录后发表评论 登录
全部评论

注册时间:2009-02-01

  • 博文量
    19
  • 访问量
    20569