日期:2014-05-16  浏览次数:20447 次

关于open_cursors和session_cached_cursors的参数值(转载)

关于open_cursors和session_cached_cursors的参数值
2010-01-26 15:32

一、如何正确设置session_cached_cursors参数:

正确设置open_cursors和'session_cached_cursors' 可以减少sql解析,提高系统性能,那么,如何正确设置'session_cached_cursors' 这个参数呢?我们可以把握下面的原则:

1、'session_cached_cursors' 数量要小于open_cursor,设置方法:

SQL> show parameter cursors

NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- -----------------------
open_cursors???????????????????????? integer???? 300
session_cached_cursors?????????????? integer???? 20
SQL>

alter system set open_cursors=1500 scope=both;

alter system set session_cached_cursors=1000 scope=spfile; (初始化文件使用了spfile)

open_cursors:该参数含义是同一个session同时打开最多在使用的游标数。
在Oracle10.2.0.1.0版本中默认为300;

session_cached_cursors:SESSION_CACHED_CURSORS, 就是说的是一个session可以缓存多少个cursor,让后续相同的SQL语句不再打开游标,从而避免软解析的过程来提高性能。(绑定变量是解决硬解 析的问题),软解析同硬解析一样,比较消耗资源.所以这个参数非常重要。
在Oracle10.2.0.1.0版本中默认为20

在oracle 9.2.0.1.0里修改会报下面的报,这是9i版本的一个bug,可在先在init文件里改好,再修改spfile文件。
SQL> alter system set session_cached_cursors=20 scope=spfile;

ORA-02096: 此选项的指定初始化参数不可修改

2、要考虑共享池的大小

3、使用下面的sql判断'session_cached_cursors' 的使用情况。如果使用率为100%则增大这个参数值。

Select 'session_cached_cursors' Parameter,
??? Lpad(Value, 5) Value,
??? Decode(Value, 0, ' n/a', To_Char(100 * Used / Value, '990') || '%') Usage
From (Select Max(s.Value) Used
????? From V$statname n, V$sesstat s
???? Where n.Name = 'session cursor cache count'
????? And s.Statistic# = n.Statistic#),
??? (Select Value From V$parameter Where Name = 'session_cached_cursors')
Union All
Select 'open_cursors',
??? Lpad(Value, 5),
??? To_Char(100 * Used / Value, '990') || '%'
From (Select Max(Sum(s.Value)) Used
????? From V$statname n, V$sesstat s
???? Where n.Name In
??????? ('opened cursors current', 'session cursor cache count')
????? And s.Statistic# = n.Statistic#
???? Group By s.Sid),
??? (Select Value From V$parameter Where Name = 'open_cursors');

二、下面是一篇关于v$open_cursor与session_cached_cursor