9i 버전에서의 메모리 관리기법

두가지로 나뉘는 메모리의 구조

SGA (System Global Area) , PGA (Program Global Area) 

8i 이전까지는 이 두 메모리를 DBA가 수동으로 관리.

설정값이 변경되면 인스턴스 재시작 해야했다.


9i 부터 Dynamic 기능 (관련 파라미터 변경 후 재부팅 없이 명령어만 쳐서 즉시 적용) 등장.

※ alter system set 명령어


9.0.1 버전에서는 Default Buffer Cache 값을 Dynamic 하게 변경

9.2.0 버전부터 Shared pool , Default Buffer Cache , Large pool , Java pool 값을

10g 버전부터는 Streams pool 추가


위 항목들을 모두 합친 값이 SGA_MAX_SIZE 에 설정된 값보다 클 수 없다.

즉, 전체 SGA의 크기SGA_MAX_SIZE 로 지정되고 이 값을 초과할 수 없다.

그래서 파라미터를 수정할 경우 전체 파라미터의 값을 늘린 후 개별 파라미터를 수정해야,

먼저 통을 늘린 후 내용을 늘려야 적용이 되는게 9i Dynamic 의 특징이다.


동적으로 각종 메모리 값을 변경할 때 그래뉼 (Granule) 단위 사용.

1 그래뉼 = 4M (SGA 전체 128M) 또는 16M (128M 초과)

10g -> SGA 128M 에서 1G 로 변경


SGA 총 크기와 그래뉼 사이즈 확인하기

SQL> select name , bytes/1024/1024 MB from v$sgainfo where name='Maximum SGA Size' ;

NAME                                     MB

-------------------------------- ----------

Maximum SGA Size                 590.667969

SQL> select name , bytes/1024/1024 MB from v$sgainfo where name='Granule Size' ;

NAME                                     MB
-------------------------------- ----------
Granule Size                              4

$ pmap `pgrep -f pmon`
-> 각 백그라운드 프로세스가 실제 사용하는 내역. 4M 씩 매핑되어 사용되는 것 확인.


PGA 관리법도 9i 부터 수동에서 자동모드로 변경된다.

WORKAREA_SIZE_POLICY 파라미터를 AUTO 로 설정할 경우 PGA 전체 크기 범위 안에서 오라클이 자동으로 PGA 값을 관리한다.
파라미터 Manual 설정 시 수동으로 관리 가능. 기본값은 Auto.
PGA 전체 크기는 PGA_AGGREGATE_TARGET

단 실제 서버프로세스가 사용할 수 있는 최대 PGA 크기는 
_PGA_MAX_SIZE (히든파라미터) 로 지정된다. 

PGA 관련 히든파라미터 조회
col ksppinm for a40
col ksppstvl for a40
select a.ksppinm , b.ksppstvl from x$ksppi a , x$ksppsv b where a.indx=b.indx and a.ksppinm like '$_size' ;

※ PGA 할당을 못받는다면 접속이 되지 않는다.
하지만 사용자가 없고 혼자서 많은 메모리를 요구하는 작업을 한다면
수동으로 변경하고 메모리를 다 땡겨쓴 후 다시 오토로 변경할 수 있다.

PGA 용량이 부족할 경우 ORA-04030 ERROR 발생한다.


10g 버전에서의 메모리 관리기법

SGA 주요 구성요소들의 크기를 오라클 스스로 변경할 수 있는 기술인

ASMM 기능이 등장한다. (Automatic Shared Memory Management)

Redo log Buffer제외한 나머지 구성요소들의 크기를 상황에 맞도록 스스로 변경.

Shared pool , Default Database Buffer Cache , Large pool , Java pool , Streams pool 자동변경

이 기능을 수행하기 위해 10g부터 새로 등장한 백그라운드 프로세스 -> MMAN (Memory Manager)


ASMM은 MMAN이라는 백그라운드 프로세스가 현재SGA의 Workload 를 보고 메모리의 부족함과 

충분함을 판단한 후 충분한 곳에서 메모리를 회수해 부족한 곳으로 재배치 해주는 기능.

이 기능을 위한 필수요소는 현재 SGA 의 Workload.

이 부분은 MMON(Memory Monitor) 라는 백그라운드 프로세스가 SYSAUX 테이블스페이스에 저장

해두는 통계정보와 각종 Advisor 들이 실시간으로 보내주는 정보를 참조함.


MMAN이 SGA의 양을 자동으로 할당하고 관리할 때 기준으로 사용하는 파라미터가

SGA_TARGET 이다. 이 파라미터에 설정된 용량 범위 안에서 메모리 할당, 관리.

SGA_TARGET 역시 SGA_MAX_SIZE 값을 초과할 수 없다. 


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


11g 버전에서의 메모리 관리기법

9I 버전의 Dynamic SGA 기능에서 10g 버전의 ASMM 기능으로 SGA의 크기를 스스로 튜닝하는

기술로 발전했고 11g 버전에서는 SGA 뿐 아니라 PGA 까지 한꺼번에 자동으로 관리하는 기술인

Automatic Memory Management (AMM) 으로 발전함.

이 기능은 Linux , Solaris , Windows , HP-UX , AIX 버전의 오라클에서만 작동.


MEMORY_TARGET

이 파라미터로 AMM 기능으로 관리할 메모리의 총량을 지정할 수 있다.

이 파라미터는 SGA와 PGA 모두를 관리.

오라클이 SGA와 PGA의 양을 이 파라미터 범위 안에서 증감하며 관리.

Dynamic parameter 이며 최대 설정값은 MEMORY_MAX_SIZE 값까지 지정 가능.

기본값은 0으로 사용하지 않는다는 의미.


MEMORY_MAX_TARGET

이 파라미터는 MEMORY_TARGET 값이 최대로 증가될 값을 지정하는 용도로 사용.

설정하지 않으면 기본값은 MEMORY_TARGET 값과 동일하게 설정됨.

AMM 기능 사용하게 된다면 SGA_TARGET , PGA_AGGREGATE_TARGET

파라미터 값을 별도로 지정할 필요는 없다. 그러나 지정을 한다면 오라클은 그 값을

최소값으로 인식한다.

권장값은 SGA_TARGET , PGA_AGGREGATE_TARGET 모두 0으로.


AMM 기능 사용시 물리적 메모리가 충분한 여유공간이 있어야하고 부족할 경우 에러 발생.

/dev/shm 공간을 공유 메모리 공간과 매핑시켜서 마치 메모리를 디스크처럼 사용.

기본 크기는 OS 메모리의 50%로 설정되는데 설정값보다 물리메모리 양이 부족할 경우 

아래와 같은 에러가 발생하면서 오라클이 시작되지 않는다.

SQL> startup;

ORA-00845: MEMORY_TARGET not supported on this system














'Oracle Admin' 카테고리의 다른 글

사용자 관리  (0) 2015.04.06
오라클 아키텍쳐  (0) 2015.04.06
Control File 관리  (0) 2015.04.02
data file , redo log file , control file 이동 간단정리  (0) 2015.04.02
Tablespace 와 Data File 관리  (0) 2015.04.01

설정

트랙백

댓글