8i 에서는 SGA, PGA 모두 수동으로 관리하여야 했다.
그리고 static 이라 설정값이 변경되면 인스턴스를 재시작 하여야 적용되었다.
1. 9i 버전에서의 메모리 관리 기법
Dynamic SGA
alter system set 이라는 명령어로 특정 파라미터의 값을 변경하면 인스턴스의 재시작 없이 즉시 적용 가능
9.0.1 버전에서는 DB Buffer Cache
9.2.0 버전부터는 shared pool, db buffer cache, large pool, java pool
10g 버전부터는 stream pool 이 추가 됨
위 항목을 모두 합친 값이 SGA_MAX_SIZE 에 설정된 값보다 클 수 없다.
오라클 메모리 변경 단위는 그래뉼(Granule)
9i 의 경우 SGA 전체크기가
128MB 이하이면 1그래뉼이 4MB
128MB 초과이면 16MB
10g SGA 크기가 1G 로 변경됨
SYS>select name, bytes/1024/1024 MB
2 from v$sgainfo
3 where name = 'Maximum SGA Size' ;
SYS>select name, bytes/1024/1024 MB
2 from v$sgainfo
3 where name = 'Granule Size' ;
백그라운드 프로세스가 실제 사용하는 내역 조회하기
$ pmap `pgrep -f pmon`
WORKAREA_SIZE_POLICY 라는 파라미터를 AUTO 로 설정할 경우 PGA 전체 크기 범위 안에서 PGA 값을 오라클이 자동으로 관리를 하게 된다.
MANUAL 로 설정할 경우 이전 버전과 같이 PGA 를 구성하는 각종 파라미터의 값을 수동으로 지정할 수 있으며 기본값은 AUTO 이다.
PGA 전체 크기는 PGA_AGGREGATE_TARGET 파라미터로 지정할 수 있다.
실제 서버프로세스가 사용할 수 있는 최대 PGA 크기는 히든 파라미터인 _PGA_MAX_SIZE 로 지정된다.
조회방법
SYS>col ksppinm for a40
SYS>col ksppstvl for a40
SYS>select a.ksppinm, b.ksppstvl
2 from x$ksppi a, x$ksppsv b
3 where a.indx = b.indx
4 and a.ksppinm like '%_size' ;
_pga_max_size
1개의 프로세스가 사용할 수 있는 최대 PGA 크기를 바이트 단위로 나타낸다.
_smm_max_size
1개의 프로세스가 직렬처리시 사용할 수 있는 최대 PGA 값을 킬로바이트 단위로 나타낸다.
_smm_px_max_size
1개의 프로세스가 병렬처리시 사용할 수 있는 최대 PGA 값을 킬로바이트 단위로 나타낸다.
PGA 값을 자동으로 관리할 경우 1세션당 사용할 수 잇는 PGA 용량
직렬작업일 경우 min(5% PGA_AGGREGATE_TARGET, 100MB)
병렬작업일 경우 min(30% PGA_AGGREGATE_TARGET/DOP, _pga_max_size)
v$pq_sysstat 을 조회하면 현재 작동중인 Parallel Query 의 busy, idle 상태 및 server start, shutdown 된 상태를 조회할 수 있다.
SQL> select * from v$pq_sysstat where statistic = 'Server Busy' ;
2. 10g 버전에서의 메모리 관리 기법
Automatic Shared Memory Management (ASMM) 등장
MMAN이라는 백그라운드 프로세스가 현재 SGA 의 Workload 를 보고 메모리의 부족함과 충분함을 판단한 후
충분한 곳에서 메모리를 회수해 부족한 곳으로 재배치 해주는 기능이다.
자동 튜닝이 되는 파라미터
Auto-Tuned dynamic Parameter :
DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE, STREAMS_POOL_SIZE
Manual-Tuned dynamic Parameter :
DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE, DB_nk_CACHE_SIZE, SGA_TARGET
SYS>show parameter sga_target ;
SYS>alter system set sga_target=100M ;
SYS>show parameter sga_target ;
SYS>select component, current_size/1024/1024 curr_MB, min_size/1024/1024 min_MB, user_specified_size/1024/1024 user_MB
2 from v$sga_dynamic_components ;
3. 11g 버전에서의 메모리 관리 기법