今天老魏遇到了一个这样的问题,
在google之后,发现讲open_cursors参数调大一些,就可以避免这样的问题(具体操作方法,可以自行百度/google)。
老魏在学习的时候,对这个游标的概念有点傻傻分不清,于是花费了一些时间,想把这个问题搞懂。
对于这个问题的实践,我参考了asktom上面,tom大师的回复。
我先阐述一下最开始的设想,我认为每执行一条sql语句,都会占用一个opencursor,并且会使v$sesstat的value值成比例增加。
为了验证我的猜想,我开始了下面的实验。
session1
SYS@orcl> select userenv('sid') from dual;
USERENV('SID')
--------------
1
SYS@orcl> select count(*) from dba_objects;
COUNT(*)
----------
13748
session2 查看sid=1的value值
SYS@orcl> select sid,value,b.class from v$sesstat a,v$statname b where a.statistic#=b.statistic# and name='opened cursors current' and a.sid=1 order by 2
2 ;
SID VALUE CLASS
---------- ---------- ----------
1 1 1
这时候,session1 无论执行多少sql语句,都不会使value增加,这引起了我的好奇,于是我在session2执行了下面的语句

我们可以看到,在上面的结果集中,只有一个cursor_type是open的,是否说明value值,与这个是相关的呢?
参考tom的回答(回答别的网友),我在session1采取了以下的操作
SYS@orcl> variable x refcursor;
SYS@orcl> variable z refcursor;
SYS@orcl> variable b refcursor;
SYS@orcl> variable a refcursor;
SYS@orcl> exec open :x for select * from dual;
PL/SQL procedure successfully completed.
SYS@orcl> exec open :z for select * from dual;
PL/SQL procedure successfully completed.
SYS@orcl> exec open :b for select * from dual;
PL/SQL procedure successfully completed.
SYS@orcl> exec open :a for select * from dual;
PL/SQL procedure successfully completed.
在session2在来执行查看语句


至此,我猜测,value只统计cursor_type为open的值。不仅仅plsql中的cursor,而且java中的createStatement和prepareStatement 也相当于cursor,都会增长value值,当达到open_cursor参数的最大值,再执行打开游标的动作,将会抛出ora-01000的问题。
我们可以通过以下语句对cursor剩余数量进行一下监控。
select value-(select max(value)from v$mystat a, v$statname b
where a.statistic# = b.statistic#
and b.name = 'opened cursors current')
from v$parameter where name='open_cursors';
老魏之前看书的时候,看到open_cursor参数过大,会引起PGA内存紧张。但是今天在google上看到了这样一种说法,
会在library cache 中分配 open_cursor参数个slot,按照这个说法,应该会对share pool会有影响。。。。我当时dump了一下library cache,但是并没有发现有关说法,这个问题就留到待我对oracle有更加深入的了解之后了。今天就简单的分享这么多,老魏文采不好,可能有些地方思维跳跃度比较大,望谅解!
本文探讨了Oracle中的open_cursors参数问题,通过实验验证了游标的使用情况。作者在学习中发现,执行SQL并不会直接增加open_cursors的value,而是与cursor_type为open的状态相关。同时,文中提到了open_cursors参数过大可能引发的PGA内存问题及对library cache的影响,分享了监控剩余游标数的方法,并表示将进一步研究其对Share Pool的影响。

1833

被折叠的 条评论
为什么被折叠?



