Oracleインスタンスで現在開いているカーソルの数を見つけるためのクエリは何ですか?
また、このデータの精度/更新頻度はどれくらいですか?
Oracle10gR2を使用しています
Oracleインスタンスで現在開いているカーソルの数を見つけるためのクエリは何ですか?
また、このデータの精度/更新頻度はどれくらいですか?
Oracle10gR2を使用しています
セッションごとに開いているカーソルの総数:
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';
出典:http ://www.orafaq.com/node/758
私の知る限り、v $ビューのクエリは、SGAの関連部分を直接指す疑似テーブル( "x $"テーブル)に基づいているため、それ以上の精度を得ることができません。ただし、これは、POS(つまり、ダーティリード)であることも意味します。
select sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor
group by sql_text, user_name order by count(*) desc;
私のために働くようです。
解析された開いているカーソルを見つける方法は次のとおりです。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
;
はSQLテキストの一部を提供するので、リークのあるアプリケーションを特定するのに役立ちます。カーソルが解析されていない場合、ここには表示されません。Oralceは、あなたよりも長く開いたままになることがあることに注意してください。
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;
Oracleには、SQLとトラブルシューティングの提案に関するこの問題のページがあります。
「オープンカーソルの問題のトラブルシューティング」 http://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352
私は次のようなものを使用します:
select
user_name,
count(*) as "OPEN CURSORS"
from
v$open_cursor
group by
user_name;
これはうまくいく可能性があります:
SELECT sql_text "SQL Query",
Count(*) AS "Open Cursors"
FROM v$open_cursor
GROUP BY sql_text
HAVING Count(*) > 2
ORDER BY Count(*) DESC;
このクイックSQLを使用して、現在の最大使用量を許可されている最大数と比較します。これにより、プロセスでカーソルが危険なほど使用されているかどうかをすぐに確認できます。
SELECT MAX (a.VALUE) AS highest_open_cur, p.VALUE AS max_open_cur
FROM v$sesstat a, v$statname b, v$parameter p
WHERE a.statistic# = b.statistic#
AND b.name = 'opened cursors current'
AND p.name = 'open_cursors'
GROUP BY p.VALUE;
上記のSQLからおそらく明らかなように、OPEN_CURSORS値はOracleパラメータであり、実行時にこのように見つけることができます。
SELECT * FROM v$parameter WHERE NAME = 'open_cursors';
上記のテーブルをクエリするには、sysdbaまたは同等のものである必要があります。