share pool_关于游标共享

设置共享游标的属性

在客户想Oracle提交SQL后,Oracle将把该SQL的正文与共享池中现有的语句进行比较,以确定是否能够使用共享池中现成的
、被解析过的语句。如果找不到SQL文本严格匹配的SQL,则Oracle不共享该语句。

    在Oracle 10g/11g版本中,我们可以通过参数CURSOR_SHARING 调整这个属性。在该参数设置为SIMILAR或FORCE得情况下,
Oracle将首先检查共享池中是否存在相同的语句,如果相同的语句没有找到,那么Oracle将在共享池中搜索结构类似的语句。
如果类似的语句可以找到,则Oracle将进行语法分析和检查,以认证该语句的解析结果和编译结果可被使用。如果上述过程
全部失败,则Oracle进行硬语法解析,产生SQL执行计划及编译,这就产生了我们不愿意看到的硬解析。
    因此,这里关键是SQL语句的类似程度。如果SQL语句是一致的,但表示条件、数量的一些关键文字不一样,就被称为类似语句。
类似语句在参数CURSOR_SHARING 设置为SIMILAR或FORCE的情况下将跳过文本检查,继续后面的解析过程以确保执行计划和原SQL语句的
一致性。
    CURSOR_SHARING参数的默认值为EXACT,这就是说,只有当SQL的正文能够完全匹配共享SQL区域中的SQL时,这种SQL语句才是共享
的,即共用执行计划和编译结果:
  SQL>show parameter CURSOR_SHARING
  NAME                                     TYPE                         VALUE
  ----------------------------    ---------------------                ---------
  curor_sharing                          string                         EXACT
 显然,CURSOR_SHARING的设计能够解决一些和SQL解析相关的性能问题。它有下列的参考值:FORCE、SIMILAR、EXACT(默认)。
下面的语句将CURSOR_SHARING参数设置为SIMILAR:

SQL>alter system set CURSOR_SHARING=SIMILAR SCOPE=BOTH;

一般情况下 CURSOR_SHARING 参数不设置为 FORCE,因为这带有强制性的含义,它可能使Oracle不得不采用共享池中并非优化的
执行计划。


总体说来,调整CURSOR_SHARING 参数并非最佳手段,而且在实践上该参数也可能带来一些意外的效果--严格的工程测试是绝对必要的!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值