프린트 하기

OS환경 : AIX 5.3(64bit)


DB 환경 : Oracle Database 10.2.0.4


에러 : cursor: pin S wait on X

active sesion 이 평소엔 30정도를 유지하다가

250까지 치솟아서 확인해보니 cursor: pin S wait on X wait event가 올라와 있었음


해결 방법 : 

아래 쿼리로 SID 조회
1
2
3
4
5
6
7
SQL> select p2raw,to_number(substr(to_char(rawtohex(p2raw)),1,8),'XXXXXXXX') sid 
     from v$session 
     where event = 'cursor: pin S wait on X'
 
P2RAW               SID 
----------------    --- 
0000001F00000000     31 

31은 첫 8자리 0000001F 값의 10진수 값임 

즉 현재 Holder가 31번 세션이라는 의미

Maxgauge와 같이 Active Session 목록과 대기 이벤트 목록을 저장하는 모니터링 툴에서는 Holder 세션을 위와 같이 손쉽게 찾아낼 수가 있음


찾은 SID로 serial#, sql_id 등 찾기

1
2
SQL> select sid,serial#,SQL_ID,BLOCKING_SESSION,BLOCKING_SESSION_STATUS,EVENT 
     from v$session where SID=31;


11g이상에서는 아래 sql을 사용하여 바로 찾을 수 있음

1
2
SQL> select sid,serial#,SQL_ID,BLOCKING_SESSION,BLOCKING_SESSION_STATUS,EVENT 
     from v$session where event ='cursor: pin S wait on X';

해당 세션을 찾은뒤 추후 원인 분석 및 필요시 유저 kill
나의 경우 10여분이 흐른뒤 자동으로 해소됨

원인 : library cache pin 경합 및 뮤텍스 경합

해당 시간대 alert log 확인 결과

다량의 log switch 가 발견됨(약 5분간 24번)

대량 data를 처리하는 dml을 실행 시켰을 가능성이 높아보임

(평소 하루에 log switch가 5번 정도 일어남)



참조 : 

How to Determine the Blocking Session for Event: 'cursor: pin S wait on X' (문서 ID 786507.1)

Troubleshooting 'cursor: pin S wait on X' waits. (문서 ID 1349387.1)

http://ukja.tistory.com/244

http://exem.tistory.com/328