6.3 프로세스 메모리 관리 방식의 비교

항목수동 SQL 실행메모리 관리자동 SQL 실행 메모리 관리
관리 방식수동자동
Variable UGA 및CGA 위치PGA Heap 내부에 서브 힙서버프로세스 내부에 별도의 top heap
관련 파라미터SORT_AREA_SIZE

SORT_AREA_RETAINED_SIZE

HASH_AREA_SIZE

BITMAP_MERGE_AREA_SIZE

CREATE_BITMAP_AREA_SIZE
WORKAREA_SIZE_POLICY

PGA_AGGREGATE_TARGET

_PGA_MAX_SIZE

_SMM_MAX_SIZE

_SMM_PX_MAX_SIZE
메모리 할당 APImalloc(), sbrk(), brk()mmap(), mmap2()
사용된 메모리 OS 반납 여부반납하지 않음 (O/S 의 Memory Manager에 의해 제어)사용 후 즉시(ummap(), ummap2() API call)
Max PGA size관련 파라미터들 * ProcessesPGA_AGGREGATE_TARGET(hard limit는 아님)

표 6-1 "자동 SQL 실행 메모리 관리"방식과 기존 방식의 차이점

Variable UGA 및 CGA 위치

PGA 덤프를 이용하여 구조 확인


************************
PGA Dump Command
************************

SQL> ALTER SESSION SET events 'immediate trace name heapdump level [level]';

-- oradebug를 이용한 방법
SVRMGR> oradebug setospid [spid]
SVRMGR> oradebug dump heapdump [level]

-- dump level
LEVEL	Heap
1	Top PGA
2	Top SGA
4	Top UGA
8	CURRENT call
16	USER call
32	Large Pool

"수동 SQL 실행 메모리 관리"시의 PGA 덤프(level 1) ==> page 241

  • Session heap(variable UGA)과 callheap(CGA)이 PGA 내부에 존재

"자동 SQL 실행 메모리 관리"시의 PGA 덤프(level 1) ==> page 242

  • Session heap(variable UGA)과 callheap(CGA)이 각각 "top uga heap" 및 "top call heap" 으로 존재
수동 SQL 실행 메모리 관리자동 SQL 실행 메모리 관리
Process Memory

Process Memory

그림 6-1 Dedicate 서버 방식에서 "자동 실행 메모리 관리" 여부에 따른 프로세스 메모리 구성

수동 SQL 실행 메모리 관리

Dedicated
수동 SQL 실행 메모리 관리

MTS
자동 SQL 실행 메모리 관리

Dedicated
자동 SQL 실행 메모리 관리

MTS
Fixed PGA서버프로세스Shared Server서버프로세스Shared Server
Variable PGA서버프로세스Shared Server서버프로세스Shared Server
Fixed UGAFixed PGA 내부Shared PoolFixed PGA 내부Shared Pool
Variable UGAVariable PGA 내부

(sub heap)
Shared Pool

large_pool_size가 설정돼있을 경우 Large Pool)
서버프로세스

(top uga heap)
Shared Pool

(large_pool_size가 설정돼있을 경우 Large Pool)
CGAVariable PGA 내부

(sub heap)
Variable PGA 내부

(sub heap)
서버프로세스

(top call heap)
서버프로세스

(top call heap)

표 6-2 오라클 프로세스 운영 방식과 SQL 실행 메모리 관리 방식에 따른 메모리 위치

프로세스 메모리 관련 파라미터

  • SORT_AREA_SIZE

- 소트를 위해 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)

  • SORT_AREA_RETAINED_SIZE

- 소트가 완료된 후 (유저 프로세스에게 result set을 리턴하기 전)에 유지되는 variable UGA 영역(bytes 단위)

  • HASH_AREA_SIZE

- 해쉬 조인을 위해 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)

  • BITMAP_MERGE_AREA_SIZE

- 비트맵 인덱스에 대한 range scan을 통해 추출된 비트맵들의 병합(merge)을 위해 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)

  • CREATE_BITMAP_AREA_SIZE

- 비트맵 인덱스를 생성할 때 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)

  • WORKAREA_SIZE_POLICY

- PGA run-time 메모리 할당 방식 지정
- AUTO   : "자동 SQL 실행 메모리 관리"방식 설정
- MANUAL : "수동 SQL 실행 메모리 관리"방식 설정

  • PGA_AGGREGATE_TARGET

- 인스턴스에 접속된 모든 오라클 서버 프로세스들의 가용한 PGA Target 크기(bytesd 단위)
- Hard Limit 아님
- PGA_AGGREGATE_TARGET > 0 이면 자동으로 WORKAREA_SIZE_POLICY=AUTO

  • _PGA_MAX_SIZE

- 하나의 오라클 프로세스당 최대로 사용할 수 있는 PGA 메모리 크기(bytes 단위)
- 1 process : M work area

  • _SMM_MAX_SIZE

- Serial 오퍼레이션을 위한 최대 work area 크기(Kbytes 단위)
- PGA_AGGREGATE_TARGET과 _PGA_MAX_SIZE에 의해 자동 계산(표 6-3 참조)

  • _SMM_PX_MAX_SIZE

- Parallel 오퍼레이션을 위한 최대 work area 크기(Kbytes 단위)
- PGA_AGGREGATE_TARGET과 _PGA_MAX_SIZE에 의해 자동 계산(표 6-3 참조)
- 개별 Slave 프로세스들의 최대 work area 크기 = Least((_SMM_PX_MAX_SIZE / Degree Of Parallelism(DOP)), _SMM_MAX_SIZE)

_PGA_MAX_SIZE > 5% of PGA_AGGREGATE_TARGET(PAT)
PAT_PGA_MAX_SIZE5% of PAT_SMM_MAX_SIZE_SMM_PX_MAX_SIZE
9i~10gR11G200Mb50Mb5% of PAT (50 Mb)30% of PAT (300 Mb)
10gR21G200Mb50Mb20% of PAT (200 Mb)50% of PAT (500 Mb)
_PGA_MAX_SIZE <= 5% of PGA_AGGREGATE_TARGET(PAT)
PAT_PGA_MAX_SIZE5% of PAT_SMM_MAX_SIZE_SMM_PX_MAX_SIZE
9i~10gR110G200Mb500Mb50% of _PGA_MAX_SIZE (100 Mb)30% of PAT (3G)
10gR210G200Mb500Mb50% of _PGA_MAX_SIZE (100 Mb)50% of PAT (5G)

표 6-3 _smm_max_size/_smm_px_max_size 계산 방식

Degree Of Parallelism(DOP)_SMM_MAX_SIZE_SMM_PX_MAX_SIZE / DOPLimit Per Slave Process
450 Mb75 Mb50 Mb
550 Mb60 Mb50 Mb
650 Mb50 Mb50 Mb
750 Mb42.8 Mb42.8 Mb
850 Mb37.5 Mb37.5 Mb

표 6-4 DOP에 따른 slave process들의 work area 최대 크기

메모리 할당 API & 사용된 메모리 OS 반납 여부

  • 수동 SQL 실행 메모리 관리 방식

- 메모리 할당 API
  + malloc()
  + sbrk()
  + brk()
  + ...

==> Page 252 Test 참조
* 수행 후에도 PGA가 증가된 상태로 유지

  • 자동 SQL 실행 메모리 관리 방식

- 메모리 할당 API(메모리 맵드 파일(memory mapped file))
  + mmap()
  + mmap2()
  + ...
- 오라클 9iR2부터 지원
  + _USE_REALFREE_HEAP=TRUE 이면 즉시 반환 활성화
  + PGA_AGGREGATE_TARGET > 0 이면 _USE_REALFREE_HEAP=TRUE

==> Page 256 Test 참조
* 100% 모두 HEAP 영역이 기존만큼 줄어들진 않지만 대부분의 영역이 OS로 반납