36

Oracleインスタンスで現在開いているカーソルの数を見つけるためのクエリは何ですか?

また、このデータの精度/更新頻度はどれくらいですか?

Oracle10gR2を使用しています

4

8 に答える 8

47

セッションごとに開いているカーソルの総数:

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(つまり、ダーティリード)であることも意味します。

于 2009-06-18T05:36:46.740 に答える
13
select  sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor
group by sql_text, user_name order by count(*) desc;

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

于 2013-08-29T15:38:25.110 に答える
9

解析された開いているカーソルを見つける方法は次のとおりです。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は、あなたよりも長く開いたままになることがあることに注意してください。

于 2009-06-18T06:55:16.283 に答える
2

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;
于 2014-07-01T08:53:24.620 に答える
1

Oracleには、SQLとトラブルシューティングの提案に関するこの問題のページがあります。

「オープンカーソルの問題のトラブルシューティング」 http://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352

于 2015-02-07T06:22:59.590 に答える
0

私は次のようなものを使用します:

select 
  user_name, 
  count(*) as "OPEN CURSORS" 
from 
  v$open_cursor 
group by 
  user_name;
于 2017-07-03T18:59:42.157 に答える
0

これはうまくいく可能性があります:

SELECT    sql_text "SQL Query", 
          Count(*) AS "Open Cursors" 
FROM      v$open_cursor 
GROUP BY  sql_text 
HAVING    Count(*) > 2 
ORDER BY  Count(*) DESC; 
于 2021-02-01T17:36:43.543 に答える
0

このクイック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または同等のものである必要があります。

于 2021-11-30T10:01:44.570 に答える