Site icon DBA의 정석

Library cache lock & pin 조회 쿼리

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 ;

Exit mobile version