by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

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




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
메모리 할당 API malloc(), sbrk(), brk() mmap(), mmap2()
사용된 메모리 OS 반납 여부 반납하지 않음 (O/S 의 Memory Manager에 의해 제어) 사용 후 즉시(ummap(), ummap2() API call)
Max PGA size 관련 파라미터들 * Processes PGA_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 UGA Fixed PGA 내부 Shared Pool Fixed PGA 내부 Shared Pool
Variable UGA Variable PGA 내부
(sub heap)
Shared Pool
large_pool_size가 설정돼있을 경우 Large Pool)
서버프로세스
(top uga heap)
Shared Pool
(large_pool_size가 설정돼있을 경우 Large Pool)
CGA Variable 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_SIZE 5% of PAT _SMM_MAX_SIZE _SMM_PX_MAX_SIZE
9i~10gR1 1G 200Mb 50Mb 5% of PAT (50 Mb) 30% of PAT (300 Mb)
10gR2 1G 200Mb 50Mb 20% of PAT (200 Mb) 50% of PAT (500 Mb)
_PGA_MAX_SIZE <= 5% of PGA_AGGREGATE_TARGET(PAT)
  PAT _PGA_MAX_SIZE 5% of PAT _SMM_MAX_SIZE _SMM_PX_MAX_SIZE
9i~10gR1 10G 200Mb 500Mb 50% of _PGA_MAX_SIZE (100 Mb) 30% of PAT (3G)
10gR2 10G 200Mb 500Mb 50% 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 / DOP Limit Per Slave Process
4 50 Mb 75 Mb 50 Mb
5 50 Mb 60 Mb 50 Mb
6 50 Mb 50 Mb 50 Mb
7 50 Mb 42.8 Mb 42.8 Mb
8 50 Mb 37.5 Mb 37.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로 반납
    

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.