Library cache lock과 library cache pin 관련 설명은 밑에 여러번 언급을 하였으므로 ..
여기서는 단순히 Library cache lock과 library cache pin이 일어날 경우 모니터링 하는 쿼리를 만들어 보았다.
dba_kgllock : library cache 관련 lock , pin Holder, waiter 정보를 확인 할 수 있다.
x$kglob : library cache 에 Cache 되어 있는 Object에 대한 정보 확인 ( v$db_object_cache의 기본 테이블 )
v$session : 세션 정보를 가지고 있는 뷰
기본이 되는 테이블은 dba_kgllock 테이블이다.
이 테이블을 조회 함으로써 현재 library cache lock과 Pin 에 대한 lock 정보를 확인 해 볼 수 있다.
SELECT /*+ ORDERED */
lo.kglnaobj AS object ,
decode( ll.kgllkmod , 0 , ‘none’ , 1 , ‘null’ , 2 , ‘share’ , 3 , ‘exclusive’ , ll.kgllkmod ) AS CurrentLockMode ,
decode( ll.kgllkreq , 0 , ‘none’ , 1 , ‘null’ , 2 , ‘share’ , 3 , ‘exclusive’ , ll.kgllkreq ) AS RequestLockMode ,
ll.kgllktype Type ,
s.schemaname HolderSchema,
s.program HolderProgram,
s.module HolderModule
FROM dba_kgllock ll ,
x$kglob lo ,
v$session s
WHERE ll.kgllkhdl = lo.kglhdadr
AND ll.kgllkuse = s.saddr ;
위의 쿼리는 단순히 현재 library cache lock 이나 pin 관련 Holder나 waiter정보를 조회 하는 쿼리이다.
lock 인지 pin 인지 확인해 볼 려면 ll.kgllktype 컬럼값을 확인해 보면 됨.
실제 Wait이 발생하는 시점에서는 v$session_wait뷰를 조회 하다가 P1RAW값을 가지고 x$kglob 뷰의 kglhdadr과 조회해 보면 된다.
아니면 dba_kgllock 뷰에서 waiter가 0 이 아닌것을 조회 함으로써 같은 역활을 할 수 있다.
v$session_wait을 조회 하다가 P1RAW값을 이용하여 확인 하는 방법
SELECT kglnaown , kglnaobj
FROM x$kglob
WHERE kglhdadr = ‘P1RAW값 ‘ ;
dba_kgllock를 조회 하면서 lock , pin 관련 모니터링
SELECT /*+ ORDERED */
lo.kglnaobj AS object ,
decode( ll.kgllkmod , 0 , ‘none’ , 1 , ‘null’ , 2 , ‘share’ , 3 , ‘exclusive’ , ll.kgllkmod ) AS CurrentLockMode ,
decode( ll.kgllkreq , 0 , ‘none’ , 1 , ‘null’ , 2 , ‘share’ , 3 , ‘exclusive’ , ll.kgllkreq ) AS RequestLockMode ,
ll.kgllktype Type ,
s.schemaname HolderSchema,
s.program HolderProgram,
s.module HolderModule
FROM dba_kgllock ll ,
x$kglob lo ,
v$session s
WHERE ll.kgllkhdl = lo.kglhdadr
AND ll.kgllkuse = s.saddr
AND ll.kgllkreq > 0 ;