Oracle에서 현재 열려 있는 커서 찾는 방법
Oracle 인스턴스에서 현재 열려 있는 커서 수를 찾기 위한 쿼리는 무엇입니까?
또한 이 데이터의 정확도/갱신 빈도는 어떻게 됩니까?
Oracle 10gR2를 사용하고 있다
세션별 열린 총 커서 수:
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$" 테이블)을 기반으로 하므로 그 이상의 정확도를 얻을 수 없습니다. 그러나 이는 포인트 인 타임(즉, 더티 읽기)임을 의미합니다.
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 또는 동등한 정보가 필요할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1010898/how-to-find-current-open-cursors-in-oracle
'programing' 카테고리의 다른 글
| 최소화된 각도 javascript에서 알 수 없는 제공자를 디버깅하고 있습니다. (0) | 2023.04.04 |
|---|---|
| 스크립트 실행 중에 AJAX 콜이 반환되면 JavaScript는 어떻게 됩니까? (0) | 2023.04.04 |
| Oracle SQL 날짜에서 시간을 제거하는 방법 (0) | 2023.03.25 |
| 반응에서 material-UI 선택 상자에서 기본값을 설정하는 방법은 무엇입니까? (0) | 2023.03.25 |
| Angularjs를 사용하여 로컬 스토리지에 데이터를 저장하는 방법은 무엇입니까? (0) | 2023.03.25 |