Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

2135

积分

502

好友

184

主题
1#
发表于 2012-6-26 14:45:10 | 查看: 14263| 回复: 7
如何找出Oracle instance中当前打开游标open cursor的总数?

欢迎大家踊跃回答 各抒己见
下载专业ORACLE数据库恢复工具PRM-DUL  For Oracle http://www.parnassusdata.com/zh-hans/emergency-services

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638  QQ: 47079569   
2#
发表于 2012-6-26 22:44:01
v$open_cursor可以不

回复 只看该作者 道具 举报

3#
发表于 2012-6-27 09:15:09
v$sysstat;

回复 只看该作者 道具 举报

4#
发表于 2012-6-27 09:46:03
我这个好象是来自metalink来查询current open cursor的脚本


show parameter session_cached_cursor
drop view user_cursors;
create view user_cursors as
select
ss.username||'('||se.sid||') ' user_process, sum(decode(name,'recursive calls',value)) "Recursive Calls",
sum(decode(name,'opened cursors cumulative',value)) "Opened Cursors", sum(decode(name,'opened cursors current',value)) "Current Cursors"
        from v$session ss, v$sesstat se, v$statname sn
where  se.statistic# = sn.statistic#
                and (     name  like '%opened cursors current%'
                                OR name  like '%recursive calls%'
                                OR name  like '%opened cursors cumulative%')
                and  se.sid = ss.sid
                and     ss.username is not null
group by ss.username||'('||se.sid||') ';

ttitle 'Per Session Current Cursor Usage '
column USER_PROCESS format a25;
column "Recursive Calls" format 999,999,999;
column "Opened Cursors"  format 99,999;
column "Current Cursors"  format 99,999;

select * from user_cursors   
order by "Recursive Calls" desc;

回复 只看该作者 道具 举报

5#
发表于 2012-6-27 12:00:47
opened cursors current 是当前打开的cursor
v$open_cursor 是被cache的cursor

回复 只看该作者 道具 举报

6#
发表于 2012-6-27 13:27:09
v$open_cursor  

包括多种cursor:


注意 11.2中  v$open_cursor 才有 cursor_type 这一字段 之前都没有 , 即无法分清楚 是open cursor 还是cached cursor

SQL> select distinct cursor_type from v$open_cursor;

CURSOR_TYPE
----------------------------------------------------------------
SESSION CURSOR CACHED
OPEN
OPEN-RECURSIVE
DICTIONARY LOOKUP CURSOR CACHED
BUNDLE DICTIONARY LOOKUP CACHED


其中 部分是 CACHED的cursor 所以不能算作open cursor


可以利用以下查询近似 了解系统中 open cursor的总数,

SQL> select count(*)
  2    from v$open_cursor where cursor_type  in ('OPEN','OPEN-RECURSIVE');

  COUNT(*)
----------
        37


or


11g 以前 使用以下查询
select sum(a.value), b.name
from v$sesstat a, v$statname b
where a.statistic# = b.statistic#
and b.name = 'opened cursors current'
group by b.name;

SUM(A.VALUE) NAME
------------ ----------------------------------------------------------------
          35 opened cursors current

回复 只看该作者 道具 举报

7#
发表于 2012-6-27 13:37:45
也就是说10g以前是还是无法算出这个值的?牛啊!太细了!

回复 只看该作者 道具 举报

8#
发表于 2012-6-27 13:46:46

回复 6# 的帖子

对open cursor的监控
  1. WITH a AS (SELECT VALUE init_open_cursors
  2.              FROM v$parameter
  3.             WHERE name = 'open_cursors'),
  4.      b AS (SELECT MAX (max_cursors) curr_max_cursors
  5.              FROM (  SELECT MAX (a.VALUE) max_cursors
  6.                        FROM v$sesstat a, v$statname b, v$session s
  7.                       WHERE     a.statistic# = b.statistic#
  8.                             AND s.sid = a.sid
  9.                             AND b.name = 'opened cursors current'
  10.                    GROUP BY s.sid))
  11. SELECT ROUND (b.curr_max_cursors / a.init_open_cursors * 100, 2) ratio
  12.   FROM a, b;
复制代码

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-26 03:08 , Processed in 0.047554 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569