2009-06-18 6 views

答えて

39

合計カーソルオープンのOracle 10gリリース2を使用しています:

ソース
select a.value, s.username, s.sid, s.serial# 
from v$sesstat a, v$statname b, v$session s 
where a.statistic# = b.statistic# and s.sid=a.sid 
and b.name = 'opened cursors current'; 

:私の知る限りは、V $ビューでクエリを知っているようhttp://www.orafaq.com/node/758

は疑似テーブルに基づいていますSGAの関連する部分を直接指している(「x $」表)ので、それ以上の正確さは得られません。これは、それがポイントインタイム(すなわち、ダーティリード)であることも意味する。

+6

遅延したOracleテーブルサーバーによって享受されているこれらの「現在開いてカーソルを」;あなたのアプリケーションに見られる数字は、あなたが間違っていたことを意味することなく異常に高いかもしれません。 参照http://www.orafaq.com/node/758 –

8

はここで解析されているオープン・カーソルを見つける方法です。 v $ open_cursorとv $ sessionにアクセスできるユーザーとしてログインする必要があります。

COLUMN USER_NAME FORMAT A15 

SELECT s.machine, oc.user_name, oc.sql_text, count(1) 
FROM v$open_cursor oc, v$session s 
WHERE oc.sid = s.sid 
GROUP BY user_name, sql_text, machine 
HAVING COUNT(1) > 2 
ORDER BY count(1) DESC 
; 

Ifは、漏れやすいアプリケーションを識別するために役立つように、SQLテキストの一部を提供します。カーソルが解析されていない場合、ここには表示されません。 Oralceは時には物事をあなたよりも長く開いておくことに注意してください。

+1

実際、これは複雑な状況です。 v $ open_cursorはキャッシュされた文を表示します。 開いているカーソル(カーソル/ ResultSetのリークがある場合にハンマーをかけることができるリソース)は、v $ sessstatの 'opened cursors current'という行にあります。 –

+1

@Ollie:しかし、それは漏れているSQL文をどのように識別するのに役立ちますか? –

+0

この選択により、カーソルを開いた実際のSQLコードが表示され、デバッグに最適です!私の+1 –

8
​​

が私のために働くようです。

1

1)あなたのIDは、SYS DBAアクセス 2を持っている必要があります)

select sum(a.value) total_cur, avg(a.value) avg_cur, max(a.value) max_cur, 
s.username, s.machine 
from v$sesstat a, v$statname b, v$session s 
where a.statistic# = b.statistic# and s.sid=a.sid 
and b.name = 'opened cursors current' 
group by s.username, s.machine 
order by 1 desc; 
0

私はこのようなものを使用します。

select 
    user_name, 
    count(*) as "OPEN CURSORS" 
from 
    v$open_cursor 
group by 
    user_name; 
関連する問題