IT기술/Oracle

성능 고도화 1 - 부록

dobbby 2017. 3. 24. 10:17
반응형

01 라이브러리 캐시 Lock & Pin

(1) 라이브러리 캐시 Lock

LCO에 대한 핸들을 보호하며 아래 세가지 모드를 사용

- Shared 모드 : 읽기 작업 시

- Exclusive 모드 : 생성 또는 변경 작업 시

- Null 모드 : Lock 을 장시간 유지하려 할 때 사용, 실제 대기를 발생시키지는 않으며, 오브젝트간 의존성을 관리하는데 사용

 

(2) 라이브러리 캐시 Pin

LCO에 실제 내용이 담긴 힙을 보호한다.

 

(3) 라이브러리 캐시 Lock과 Pin, 두개의 직렬화 장치를 따로 두는 이유

LCO 핸들은 영구적인 Fixed Array 영역에 할당되는 반면 LCO 자체는 동적으로 관리되는 힙 영역에 할당되는데,

힙에 할당된 전체 또는 일부 청크가 언제든 유실될 가능성이 있기 때문이다.

실제 LCO 컨텐츠의 정합성은 Pin을 통해 보장되고, 그것과 별도로 Lock을 둠으로서 동시성을 높이도록 하는 것.

 

 

 

 

02 Cursor_Sharing

바인드 변수 사용원칙을 잘 지키지 않아 시스템 정상 가동이 어려운 경우

라이브러리 캐시 경합을 일시적으로 해결하기 위해 cursor_sharing 파라미터 변경을 고려

 

EXACT : SQL문이 100% 같을 때만 커서 공유, 기본값

FORCE : 문자열은 같고 Literal 값만 다를 때 그 값들을 시스템이 자동 생성한 바인드 변수로 대체함으로써 공유 가능한 SQL 커서를 만들고 사용

            컬럼 히스토그램을 사용하지 못하는 문제 때문에 성능이 더 나빠질 가능성이 있다.

SIMILAR : Literal 값에 따라 별도의 커서를 생성함으로 다른 실행계획을 사용할 수 있게 한다.

             히스토그램이 없을 때 FORCE와 똑같이 작동

 

 

 

 

03 Deterministic 함수 사용 시 주의사항

함수의 입력 값이 같다면 출력 값도 항상 같음을 선언하려는데 목적이 있다.

성능도 중요하지만 잘못 사용했을 때 데이터 일관성을 해칠 수 있음을 간과해선 안된다.

반응형