메뉴 건너뛰기

bysql.net

3. 라이브러리 캐시 구조

2010.06.28 00:15

balto 조회 수:9849

- 라이브러리 캐시 : Shared Pool에 위치하며 SQL 공유 커서 및 데이터베이스 오브젝트에 대한 정보를 관리한다. PL/SQL Area(프로시저, 함수, 패키지, 트리거)도 포함한다.

- (정의) 실행가능 LCO : 실행가능한 SQL 커서나 PL/SQL 오브젝트

- (정의) 오브젝트 LCO : 테이블, 인덱스, 클러스터 같은 데이터베이스 오브젝트(데이터 딕셔너리 캐시에도 저장되어 있지만 LCO 간의 의존성을 관리하기 위하여 저장)


라이브러리 캐시의 내용

(실험) 라이브러리 캐시에 저장된 오브젝트 보기

select namespace, gets, pins, reloads, invalidations

from v$librarycache;

NAMESPACE

GETS

PINS

RELOADS

INVALIDATIONS

SQL AREA

6321

93511

905

99

TABLE/PROCEDURE

8444

19849

1168

0

BODY

370

535

48

0

TRIGGER

232

382

18

0

INDEX

288

1767

24

0

CLUSTER

266

708

8

0

OBJECT

0

0

0

0

PIPE

0

0

0

0

JAVA SOURCE

0

0

0

0

JAVA RESOURCE

0

0

0

0

JAVA DATA

0

0

0

0

(설명) v$librarycache에 저장되는 내용

- Stored Object : 영구적으로 저장되는 테이블, 인덱스, 클러스터, 뷰, 트리거, 패키지 등

- Transient Object : 일시적으로 저장되는 커서, 이름없는 pl/sql 등


라이브러리 캐시 내의 shares pool latch 의 내용

(실험) 라이브러리 캐시 7개까지 latch 사용

select child#, gets, misses, sleeps, immediate_gets, immediate_misses

from v$latch_children

where name='shared pool'

order by child#;

CHILD#

GETS

MISSES

SLEEPS

IMMEDIATE_GETS

IMMEDIATE_MISSES

1

278105

333

37

0

0

2

11

0

0

0

0

3

11

0

0

0

0

4

11

0

0

0

0

5

11

0

0

0

0

6

11

0

0

0

0

7

11

0

0

0

0


라이브러리 캐시 관리 구조

- 라이브러리 캐시는 해시 구조로 관리된다.

- LCO 핸들이 체인으로 연결되어 있고 핸들을 통해 LCO를 찾아간다.

fig4-6.jpg


- LCO emp, sql 문 등이 라이브러리 캐시에 적재되어 있음,

- sql 문이 같은데 공유하지 못하는 경우 child 커서를 만든다.

- library cache latch를 먼저 획득하여 접근한다.

select child#, gets, misses, sleeps, immediate_gets, immediate_misses

from v$latch_children

where name='library cache'

order by child#;

- LCO에 대한 라이브러리 캐시 LOCK과 라이브러리 캐시 pin을 사용한다.

LOC 접근시 : 핸들에 대한 Lock 획득 -> 힙에 대한 pin 획득 및 pin 걸기

- shared pool 래치와 library cache 래치 경합은 soft/hard 파싱이 심하게 일어날 EO 발생하고, library cache lock과 librar y cache pin 대기 이벤트는 SQL 수행 중 DDL을 날릴때 사용한다. 트랜잭션이 활발할 때 DDL 문을 수행하면 라이브러리 캐시에 부하가 유발된다.


라이브러리 캐시 최적화를 위한 튜닝 기법

(1) 커서를 공유할 수 있도록 SQL을 작성한다. - 바인드 변수에 주의한다.

(2) 세션 커서 해싱 기능을 이용하여 라이브러리 캐시에서 SQL을 찾는 비용을 줄인다.

(3) 애플리케이션 커서 캐싱을 이용해 Parse Call 발생량을 줄인다.

번호 제목 글쓴이 날짜 조회 수
67 Front Page file 운영자 2010.05.17 154865
66 1 장. 오라클 아키텍처 운영자 2010.05.20 17842
65 1. 기본 아키텍처 [1] file 휘휘 2010.05.23 19899
64 3. 버퍼 Lock [1] 휘휘 2010.05.24 15225
63 2. DB 버퍼 캐시 file 휘휘 2010.05.24 21916
62 4. Redo file 휘휘 2010.05.24 11314
61 9. Snapshot too old balto 2010.05.30 8100
60 10. 대기 이벤트 balto 2010.05.30 8010
59 7. Consistent vs. Current 모드 읽기 휘휘 2010.05.31 10537
58 8. 블록 클린아웃 휘휘 2010.05.31 12282
57 11. Shared Pool file 실천하자 2010.05.31 18511
56 5. Undo file 토시리 2010.05.31 18650
55 1. 트랜잭션 동시성 제어 실천하자 2010.05.31 8631
54 6. 문장수준 읽기 일관성 file 토시리 2010.06.01 10432
53 2장. 트랜잭션과 Lock 운영자 2010.06.01 6895
52 1. Explain Plan 실천하자 2010.06.06 14663
51 2. AutoTrace 실천하자 2010.06.06 8597
50 3장. 오라클 성능 관리 운영자 2010.06.06 6694
49 3. SQL 트레이스 file balto 2010.06.06 21175
48 4. DBMS_XPLAN 패키지 balto 2010.06.06 10461