Library cache pin

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] Basic Info

library cache pinLibrary Cache 객체에 대한 수행이나 변경시 library cache object(LCO)에 대해 획득하는 락이다. Library cache pin을 획득하는 과정에서 경합이 발생하면 library cache pin 이벤트를 대기한다. library cache pin 이벤트의 P1=handle address, P2=lock address, P3=mode*100+namespace 로 어떤 객체에 대해 어떤 모드로 락을 획득하는 과정에서 경합이 발생했는지 파악할 수 있다. Library cache pinlibrary cache lock을 획득한 후에 library cache 객체에 대해 추가적인 작업이 필요할 때 획득하게 된다. 가령 특정 프로시저나 SQL 문장을 수행하고자 하는 프로세서는 library cache lock을 Shared 모드로 획득한 후에, library cache pin을 Shared 모드로 획득해야 한다. 프로시저를 컴파일(alter procedure ... compile ...)하는 경우에는 library cache pin을 Exclusive하게 획득해야 한다. 핀(pin)이라는 용어의 의미는, LCO에 핀을 꽂는다는 것으로, 핀이 꽂혀있는 동안 LCO의 값이 변동되지 않도록 보장받는 역할을 한다. 한가지 기억할 사실은 하드파싱이 발생하는 경우 하드파싱이 이루어지는 동안 해당 SQL 커서에 대해 library cache pin을 Exclusive하게 획득한다는 것이다.

일반적으로, 현재 많이 사용되는 오브젝트에 대한 DDL(테이블변경, 뷰, 프로시저 컴파일등) 명령을 수행할 경우 library cache pin 대기이벤트가 많이 발생되게 된다. 따라서 업무시간 중에 오브젝트에 대한 변경은 가급적 삼가해야 한다. 만일 해당 이벤트가 광범위하게 발생된다면, shared pool에 대한 튜닝이 필요할 수도 있다. 해당 이벤트가 발생할 경우에는 아래의 SQL을 수행하여 핀을 점유하고 있는 세션 및 모드를 확인할 수 있다.

select s.sid, kglpnmod "Mode", kglpnreq "Req"
from   x$kglpn p, v$session s
where  p.kglpnuse=s.saddr
and    kglpnhdl='&P1RAW' ; 
SID Mode Req ------------------------- 8 2 0 25 0 3

만일 수행결과가 위와 같다면, 8번 세션이 25번 세션의 library cache pin 대기에 대한 홀더(holder) 세션이다. 또한 8번 세션은 shared 모드(2)로 핀을 소유하고 있으며, 25번 세션은 exclusive 모드(3)로 핀을 소유하기 위해 대기하고 있는 것이다.

[편집] Parameter & Wait Time

[편집] Wait Parameters

library cache pin 대기이벤트는 대기 파라미터를 사용하지 않는다.

  • P1 : 핀(pin) 대기와 관련된 오브젝트의 메모리 주소
  • P2 : 핀(pin) 의 메모리 주소
  • P3 : 모드(mode)와 네임스페이스(namespace). 모드는 2(Shared)와 3(Exclusive)으로 구분되며, 네임스페이스는 V$LIBRARYCACHE 또는 V$DB_OBJECT_CACHE 뷰에서 보여지는 NAMESPACE를 의미한다.

오라클7.0부터 8.1.7까지는 10*Mode+Namespace로 표현되며, 오라클9.0부터 9.2까지는 100*Mode+Namespace로 표현된다. Namespace 부분은 번호로 표시되며 번호에 해당되는 네임스페이스는 다음과 같다.

0 Sql Area
1 Table / Procedure / Function / Package Header
2 Package Body
3 Trigger
4 Index
5 Cluster
6 Object
7 Pipe
13 Java Source
14 Java Resource
32 Java Data

[편집] Wait Time

PMON 프로세스는 1초까지 대기하며, 다른 프로세스들은 3초까지 대기한다. 해당 대기시간 후에도 핀을 획득하지 못할 경우 반복적으로 대기한다.

[편집] Check Point & Solution

[편집] 업무시간중 DDL의 수행을 피하라

Library cache lock 대기에 의한 성능저하현상은 대부분 부적절한 DDL(create, alter, compile, flush 등)에 의해 발생한다. 따라서 트랜잭션이 왕성한 시스템에 대해서 DDL을 수행할 때는 이 내용을 충분히 고려한 후 수행하도록 해야 한다. 간혹 하드 파싱이 왕성한 시스템에서 shared pool 메모리 고갈을 피하기 위해(ORA-4031 에러를 피하기 위해) flush를 수행하는 경우가 있으나 시스템에 악영향을 주는 경우가 많다. 하드 파싱도 나쁘지만, 하드 파싱이 발생하는 도중에 DDL을 수행하는 것은 말할 수 없이 나쁘다.

[편집] Event Tip

[편집] Library Cache의 구조

latch: library cache#Library Cache 구조를 참조한다.

[편집] SQL 실행 순서

latch: library cache#SQL 수행을 참조한다.

[편집] Analysis Case