메모리 구조중급Oracle 전용
Shared Pool
SQL 실행계획과 딕셔너리 캐시를 담는 SGA 영역
정의
SGA의 핵심 구성 요소 중 하나. Library Cache(파싱된 SQL과 실행계획), Data Dictionary Cache(시스템 메타데이터), Result Cache(결과 캐시) 등이 들어 있다. 같은 SQL이 다시 실행될 때 Library Cache의 실행계획을 재사용하면 Hard Parse를 피할 수 있다(Soft Parse).
왜 중요한가?
Shared Pool이 부족하거나 단편화되면 ORA-04031 에러가 발생한다. Bind Variable을 안 쓰는 SQL이 많으면 Library Cache가 무수한 단발성 SQL로 채워져 Hard Parse가 폭증한다.
틀리기 쉬운 포인트
- !Bind Variable 미사용은 Shared Pool 단편화의 주범입니다.
- !CURSOR_SHARING=FORCE는 임시방편. 코드 수정으로 Bind Variable 도입이 정석.
- !Shared Pool 부족은 ORA-04031로 나타납니다.
예시
-- Library Cache Hit Ratio SELECT namespace, gets, gethits, gethitratio FROM v$librarycache WHERE namespace = 'SQL AREA';
성능 포인트
!Bind Variable 미사용은 Shared Pool 단편화 주범. CURSOR_SHARING은 임시방편.