重庆思庄技术分享——open_cursors参数
sizhuang1
2024年12月06日 16:38

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 也是不对的,这个时候你得检查应用程序的代码是否合理,比如说应用程序是否打开了游标,却没有在它完成工作后没有及时关闭。