항목 | 수동 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 실행 메모리 관리"방식과 기존 방식의 차이점
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
"자동 SQL 실행 메모리 관리"시의 PGA 덤프(level 1) ==> page 242
수동 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 실행 메모리 관리 방식에 따른 메모리 위치
- 소트를 위해 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)
- 소트가 완료된 후 (유저 프로세스에게 result set을 리턴하기 전)에 유지되는 variable UGA 영역(bytes 단위)
- 해쉬 조인을 위해 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)
- 비트맵 인덱스에 대한 range scan을 통해 추출된 비트맵들의 병합(merge)을 위해 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)
- 비트맵 인덱스를 생성할 때 오라클 프로세스가 최대로 사용할 수 있는 메모리 영역(bytes 단위)
- PGA run-time 메모리 할당 방식 지정
- AUTO : "자동 SQL 실행 메모리 관리"방식 설정
- MANUAL : "수동 SQL 실행 메모리 관리"방식 설정
- 인스턴스에 접속된 모든 오라클 서버 프로세스들의 가용한 PGA Target 크기(bytesd 단위)
- Hard Limit 아님
- PGA_AGGREGATE_TARGET > 0 이면 자동으로 WORKAREA_SIZE_POLICY=AUTO
- 하나의 오라클 프로세스당 최대로 사용할 수 있는 PGA 메모리 크기(bytes 단위)
- 1 process : M work area
- Serial 오퍼레이션을 위한 최대 work area 크기(Kbytes 단위)
- PGA_AGGREGATE_TARGET과 _PGA_MAX_SIZE에 의해 자동 계산(표 6-3 참조)
- 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
+ malloc()
+ sbrk()
+ brk()
+ ...
==> Page 252 Test 참조
* 수행 후에도 PGA가 증가된 상태로 유지
- 메모리 할당 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로 반납