: ) 태영쓰 :: SGA Shared Pool
Shared Pool
Shared Pool (쉐어드 풀) 은 SQL과 PL/SQL을 Cursor(커서) 와 execution plan(실행 계획) 을 저장 하여 빠르게 실행 될 수있도록 함.
Shared Pool의 공간 할당은 LRU(Least Recently Used) 알고리즘을 통해 관리. --> 최상의 성능으로 유지하려면 Size 관리와 SQL문의 재사용율을 높여야한다.
LRU List 는 사용한지 오래된 객체를 제거하고 요청된 메모리 용량을 충족하는 연속된 메모리를 할당 해줍니다.
ASMM(Automatic Shared Memory Manager) 이 활성화 되어 있지 않은 경우 충분한 연속 메모리가 없으면 ORA-04031에러를 발생합니다. --> 단편화
Ø 이 경우 메모리 추가나 ASMM활성화
또한 LRU 작업은 Latch(Oracle 내부 메모리보호) 또는 Mutax(OS level 메모리보호) 로 보호 됩니다.
Shared Pool의 크기를 늘리면 그만큼 보유할수 있는 Library Cache안의 Cursor의 양의 증가하기 때문에 재사용할 수 있는 시간이 증가한다. 따라서 Parse에 걸리는 시간이 줄어듬
Shared Pool 의 공간은 여러개의 Segment로 이루어 지며 Segment는 연속된 Chunk(청크)로 이루어 진다. 이때 Chunk는 비규칙 적이다.
Shared Pool 과 관련된 뷰
밑줄친 뷰는 자주쓰이는 뷰입니다.
V$SGASTAT, V$SGAINFO : 모든 SGA구조의 크기를 표시
V$LIBRARYCACHE : 라이브러리 캐시 관리에 대한 통계
V$LIBRARY_CACHE_MEMORY : 각 네임스페이스의 메모리 사용에 대한 통계
V$SHARED_POOL_RESERVED : shared pool 공간
V$SQLSTATS : 다른 V$SQL 뷰 대신 사용되는 영향이 적은 뷰
V$SQL : Shared SQL Area에 대한 통계
V$SQLAREA : 모든 공유 커서에 대한 전체 통계
V$SQLTEXT : 잘리지 않고 여러 행에 걸쳐 있는 전체 SQL 텍스트
V$DB_OBJECT_CACHE : 캐시된 데이터베이스 객체(패키지 포함), SQL문에서 참조하는 테이블및 동의어 등의 객체를 보여줌 / V$DB_OBJECT_CACHE.KEPT