open_cursors参数
参数open_cursors概况
open_cursors 设定每个 session(会话)最多能同时打开多少个 cursor(游标)。
当我们执行一条 sql 语句的时候,我们将会在 shared pool 产生一个 library cache object,cursor 就是其中针对于 sql 语句的一种 library cache object。另外我们会在 pga 有一个 cursor 的拷贝,同时在客户端会有一个statement handle,这些都被称为 cursor,在 v$open_cursor 里面我们可以看到当前打开的 cursor 和 pga 内 cached cursor。
作用是让后续相同的 sql 语句不在打开游标,从而避免软解析过程来提供应用程序的效率。
参数open_cursors大小
查询当前数据库设定的值:
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 300
修改该参数:SQL> alter system set open_cursors =1000;System altered
该参数为动态参数,修改后立即生效。
参数open_cursors应该设置多大
通过以下语句查询:
SQL> SELECT MAX(A.VALUE) AS HIGHEST_OPEN_CUR, P.VALUE AS MAX_OPEN_CUR2
FROM V$SESSTAT A, V$STATNAME B, V$PARAMETER P3
WHERE A.STATISTIC# = B.STATISTIC#4
AND B.NAME = 'opened cursors current'5
AND P.NAME = 'open_cursors'6
GROUP BY P.VALUE;
HIGHEST_OPEN_CUR MAX_OPEN_CUR
---------------- --------------------------------------------------------------------------------
43 300
字段含义:
HIGHEST_OPEN_CUR 是实际打开的 cursors 的最大值;
MAXOPEN CUR 是参数 Open_cursors 的设定值。
如果二者太接近,甚至触发 ORA-01000 错误,那么你就应该调大参数 open_cursors 的设定值。
如果问题依旧没有解决,盲目增大 open_cursors 也是不对的,这个时候你得检查应用程序的代码是否合理,比如说应用程序是否打开了游标,却没有在它完成工作后没有及时关闭。
参数open_cursors概况
open_cursors 设定每个 session(会话)最多能同时打开多少个 cursor(游标)。
当我们执行一条 sql 语句的时候,我们将会在 shared pool 产生一个 library cache object,cursor 就是其中针对于 sql 语句的一种 library cache object。另外我们会在 pga 有一个 cursor 的拷贝,同时在客户端会有一个statement handle,这些都被称为 cursor,在 v$open_cursor 里面我们可以看到当前打开的 cursor 和 pga 内 cached cursor。
作用是让后续相同的 sql 语句不在打开游标,从而避免软解析过程来提供应用程序的效率。
参数open_cursors大小
查询当前数据库设定的值:
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 300
修改该参数:SQL> alter system set open_cursors =1000;System altered
该参数为动态参数,修改后立即生效。
参数open_cursors应该设置多大
通过以下语句查询:
SQL> SELECT MAX(A.VALUE) AS HIGHEST_OPEN_CUR, P.VALUE AS MAX_OPEN_CUR2
FROM V$SESSTAT A, V$STATNAME B, V$PARAMETER P3
WHERE A.STATISTIC# = B.STATISTIC#4
AND B.NAME = 'opened cursors current'5
AND P.NAME = 'open_cursors'6
GROUP BY P.VALUE;
HIGHEST_OPEN_CUR MAX_OPEN_CUR
---------------- --------------------------------------------------------------------------------
43 300
字段含义:
HIGHEST_OPEN_CUR 是实际打开的 cursors 的最大值;
MAXOPEN CUR 是参数 Open_cursors 的设定值。
如果二者太接近,甚至触发 ORA-01000 错误,那么你就应该调大参数 open_cursors 的设定值。
如果问题依旧没有解决,盲目增大 open_cursors 也是不对的,这个时候你得检查应用程序的代码是否合理,比如说应用程序是否打开了游标,却没有在它完成工作后没有及时关闭。