각 프로세스들이 개별적으로 사용하는 메모리 공간.
server process 나 백그라운드 process들 전부 각각의 PGA를 가지고 각자의 용도에 맞게 사용.
1) Private SQL Area
user process로부터 sql 문장을 전달받은 server process는 자신에게 작업을 요청한 user process의 정보를
session memory 부분에 저장을 한 후 해당 SQL을 Parse 작업을 시작.
-persistent area : bind 변수 값을 저장해두는 공간
-runtime area : sql 문장을 수행하는 도중에 데이터를 임시로 저장해야 할 경우 사용하는 공간
2) SQL Work Area
sort 관련작업 또는 hash관련작업 있을경우 이곳에서 수행.
oracle 8i 버전까지는 구성요소의 크기를 변경하고 나서 oracle instance를 중단했다가 재시작 해야만
변경사항 적용되는 Static SGA 방식으로 운영.
9i부터 Dynamic SGA라는 특징 등장.
Oracle instance 재시작 없이 즉시 적용할수 있는 기능
ex) alter system set db_cache_size=100 M;
위의 예를든 설정은 정확히 100m가 되는것이 아님. 메모리 할당 단위 Granul을 사용함.
버전별로 설정에 따라 9i 의 경우 sga_max_size 가 128mb 이하시 1 Granul = 4M 초과시 16M 단위로 구성
10g 이상부터는 1G 이하 1granul=4m, 초과시 1granul=16m
'오라클 데이터베이스 > ADMIN' 카테고리의 다른 글
SGA(system global area) 주요 구성요소 (0) | 2013.07.23 |
---|---|
Oracle Server 의 전체 구조, SGA(system global area) 할당 및 관리 (2) | 2013.07.23 |
1) Database Buffer Cache
데이터의 조회와 변경 등의 실제 작업이 일어나는 공간(메모리).
3가지 상태로 나누어 두고 리스트를 통해 관리
-Pinned Buffer : 다른 사용자가 현재 사용하고 있는 Buffer 블록을 의미함. -
(commit 되지 않음, rollback가능, 저장되지 않은 상태)
-Dirty Buffer : 사용자가 내용을 변경후 데이터 파일에 저장하지 않은 Buffer를 의미.
(commit 된 상태, 저장하기 전)
-Free Buffer : 사용되지 않았던지 또는 Dirty Buffer에서 저장완료되어 재사용 할수 있는 블록 의미.
위 3가지 상태를 관리하는 리스트를 만들어 사용. LRU (Least Recently Used) list
list를 통해 여러 사용자들이 몰려 Free Buffer 를 먼저 쓰겠다고 시도.
때문에 이를 관리하는 Latch (번호부여) 은행 번호표와 같은...
위의 리스트를 효율성을 위해 Oracle은 아래와 같이 세부적으로 나누어 관리한다.
이를 working set 또는 working data set 이라 한다.
working data set(working set) | |||
LRU List (dirty + free list) |
메인 리스트 |
사용된 buffer 리스트 또는 hot영역 cold영역(dirty+free) | |
보조 리스트 |
미사용된 buffer 또는 dbwr에 의해 기록된 buffer(free list) | ||
LRUW List (dirty list) |
메인 리스트 |
변경된 buffer 리스트(dirty list) | |
보조 리스트 |
dbwr에 의해 기록중인 buffer들의 리스트 |
Latch
위 리스트들의 메모리(free list) 사용을 하기위해서 서로 먼저 쓰겠다는것을
방지하기 위한 번호표와 같은 순서를 부여.
ex) 리두로그 버퍼에(메모리) 변경된 데이터를 기록시
Redo copy latch 를 먼저 확보후 Redo Allocation latch 를 확보해야 기록 가능
2) Redo log buffer
데이터 변경사항 (DDL, DML 실행) 생길시 변경내용을 기록해두는 역할.
장애 발생시 복구를 하기 위해...
(단, direct load 나 table 또는 index 생성시 nologging 옵션이면 기록되지 않음.)
3) Shared Pool
어떤 대상을 공유해서 사용하기 위해 만들어진곳.
- Library Cache : Soft Parse 할때 사용되는 공간. 이미 수행되었던 SQL , PL/SQL 문장의
Parse Code 와 해당 sql , pl/sql 문장 , 실행계획 등이 저장되어 있고, LRU 알고리즘으로 관리.
-Dictionary Cache : 구문분석이나 옵티마이져가 실행계획 세울때 사용되는 주요 Dictionary 들이
Row단위로 Cache되어 있음. LRU 알고리즘으로 관리.
-Server Result Cache : select 수행되었을 경우 DB Buffer Cache까지 가지 않고 즉시
이곳으로 가져가도록 해서 속도를 높이는것. 이론적으로 DB buffer cache 의 I/O를
발생시키지 않으므로 성능 향상. (테스트에서는 큰차이가 보이지 않았음)
사용시 /*+ result_cache */ 를 써주어야함.
사용 예 ) select /*+ result_cache */ * from scott.rtest;
번거로울시 alter system set result_cache_mode=force;
-Reserved Pool : 5KB가 넘는(11g기준) 오브젝트가 적재되어야 할 경우에 사용하기위해서 예약해둔 공간.
4) Large Pool
필수 구성요소는 아님. 특정기능 사용할 경우에만 쓰는 SGA 구성요소.
사용되는 주요 경우
-Shared Server mode로 Oracle Server를 운영시 UGA( User Global Area )를 이곳에 생성
-Parallel Execution(병렬처리)작업시 Process들 간의 Message Buffer가 이곳에 생성
-RMAN 으로 백업이나 복구를 할 경우 RMAN이 사용하는 I/O용 Buffer가 이곳에 생성
5) Java Pool
-java 관련 code나 java virual machine(JVM) 관련 데이터를 저장하기 위해 생성되는 선택적 공간
6) Streams Pool
-10g 이상버전부터 생긴 SGA 구성요소. streams 기능을 사용할 경우에만 사용됨.
7) Fixed SGA
-백그라운드 process들이 필요한 db 의 전반적인 공유정보나 각 process들 끼리 공유해야만 하는
Lock정보 같은 내용들이 저장됨.
'오라클 데이터베이스 > ADMIN' 카테고리의 다른 글
Dynamic SGA (0) | 2013.07.30 |
---|---|
Oracle Server 의 전체 구조, SGA(system global area) 할당 및 관리 (2) | 2013.07.23 |