3. 라이브러리 캐시 구조
2010.06.28 00:15
- 라이브러리 캐시 : 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를 찾아간다.
- 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 발생량을 줄인다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
67 | Front Page | 운영자 | 2010.05.17 | 154865 |
66 | 1 장. 오라클 아키텍처 | 운영자 | 2010.05.20 | 17842 |
65 | 1. 기본 아키텍처 [1] | 휘휘 | 2010.05.23 | 19899 |
64 | 3. 버퍼 Lock [1] | 휘휘 | 2010.05.24 | 15225 |
63 | 2. DB 버퍼 캐시 | 휘휘 | 2010.05.24 | 21916 |
62 | 4. Redo | 휘휘 | 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 | 실천하자 | 2010.05.31 | 18511 |
56 | 5. Undo | 토시리 | 2010.05.31 | 18650 |
55 | 1. 트랜잭션 동시성 제어 | 실천하자 | 2010.05.31 | 8631 |
54 | 6. 문장수준 읽기 일관성 | 토시리 | 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 트레이스 | balto | 2010.06.06 | 21175 |
48 | 4. DBMS_XPLAN 패키지 | balto | 2010.06.06 | 10461 |