2014. 12. 10. 18:33

Shared Pool / Library Cache 와 OWI


Shared Pool과 Heap

Shared Pool은 SGA 영역 중 Variable 영역[각주:1]에 속함

- Library Cache

- Row Cache(=Data Dictionary Cache)

Shared Pool이 어떤 메모리 영역으로 나누어지는 확인 -> V$SGASTAT 뷰 조회


SYS>ed

Wrote file afiedt.buf


  1* select count(*) from v$sgastat where pool='shared pool'

SYS>/


  COUNT(*)

----------

       872           -> 총 872  개의 메모리 영역으로 나누어짐

                            각 메모리 영역의 크기는 동적으로 변하게 됨


Shared Pool의 구성요소

Permanent Area : process, session, segmented array(enqueue, transaction,...), 프로세스 목록, 세션 목록, Enqueue 목록 등의 자원들은 Shared Pool 영구 영역(Permanent Area)에 할당되며 인스턴스와 그 수명을 같이 함

Library Cache : SQL문을 수행하는데 필요한 모든 객체(SQL,테이블, 뷰, 프로시저 등)에 대한 정보를 관리함

Row Cache(Dictionary Cache) : 오라클이 사용하는 딕셔너리 정보를 관여함

Reserved Area : 예약영역, 동적인 메모리 할당을 위해 오라클 여분의 예약 영역을 할당해줌



Shared Pool은 힙(heap)라고 불리는 메모리 관리기법을 이용해 관리

- 힙은 순서대로 저장하지 않고 빈자리가 있으면 막 넣기 때문에 별도의 리스트(Heap Manager)가 필요함



shared pool heap 구조도





Shared pool heap 으로 부터 메모리를 할당받고자 하는 모든 프로세스는 반드시 shared pool latch 를 획득 해야함

하드 파싱이 발생하는 경우

- 프로세스는 새로운 SQL문을 저장할 공간을 Shared pool에서 할당 받아야 하고, 반드시 Shared pool latch 를 획득 해야함

Shared pool latch는 기본적으로 전체 인스턴스에 하나만 존재하며, 필요한 메모리(청크)를 할당받는 전체 과정동안 보유해야 함

- 동시에 많은 프로세스가 Shared pool 메모리를 사용하는 경우 latch를 획득하는 과정에서 경합이 발생하게 됨

   이 때, latch:shared pool 이벤트를 대기함 



  1. Shared Pool + Java Pool + Large Pool + Streams Pool 등으로 구성 [본문으로]

'DB' 카테고리의 다른 글

owi 락  (0) 2014.12.09
데이터 모델링  (0) 2014.12.08
모델링 기초지식  (0) 2014.12.04
Posted by 성장하는yw