oracle调优之--关于cursor_sharing+中间件调优(摘自文平书)

设置共享游标的属性

在客户想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 参数并非最佳手段,而且在实践上该参数也可能带来一些意外的效果--严格的工程测试是绝对必要的!

 

|||||||||||||||||||

连续的数据库连接

单就用户连接数据库而言,这本身就是一件消耗资源的操作。其过程包括服务器进程的派生、内存的开销、栓锁资源的
申请等。所以,应用程序在编写时不应用类似频繁的断开或在连接数据库的操作。


如果是基于中间件的多层应用开发,例如Weblogic中间件的使用,应充分使用其连接缓存池的功能,在连接池中预定义若干
数据库连接对象。这样,当客户端应用程序需要连接数据库时,可以直接引用已经创建好的连接对象。

你可能感兴趣的:(oracle调优之--关于cursor_sharing+中间件调优(摘自文平书))