SGA란?


- System Global Area : 오라클이 데이터를 읽거나 변경하기 위해 사용하는 공용 메모리 영역
- SGA 구조
   * Shared Pool
   * Data Buffer
   * Redo Log Buffer
   * Large Pool
   * Java Pool

- 공용 메모리 영역이므로 동일 데이터베이스에 접속하는 모든 사용자는 동일 SGA를 사용한다.
- 인스턴스가 시작될 때 시스템 메모리에서 할당 받으며 종료될 때 다시 시스템 메모리 영역으로 반환한다.
- 오라클 파라미터 파일(init.ora)의 조정으로 SGA의 각 부분의 크기 조절가능
  (initSID.ora 파일-> shared_pool_size, log_buffer, java_pool_size, large_pool_size, buffer_cache_size )

- 9i: 오라클 서버의 종료 없이 SGA의 구성을 SGA_MAX_SIZE 파라미터 값 범위 내에서만 각각의 크기를 동적으로 변경 가능
- 10g : 각각의 SGA component에 대한 값들을 manual하게 설정할 필요가 없고, SGA_TARGET 파라미터 하나만 셋팅하여 해당 인스턴스에 필요한 SGA 의 최대크기를 설정하여 SGA내 영역들은 자동으로 resize 할 수 있다.
- 11g : PGA와 SGA  영역 설정이 한층 유연해져 서로간에 할당된 메모리를 자유롭게 이전할 수 있도록 MEMORY_TARGET이 추가 되었다.

 

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

< ASMM(Automatic Shared Memory Management)>

-  10g부터 공유 메모리 (SGA) 의 주요 구성 요소들의 크기를 오라클이 스스로 변경할 수 있게 하는 기능 등장

- ASMM 로 변경 가능한 구성요소는 Shared Pool, Default Database Buffer Cache, Large Pool, java Pool, Streams Pool 이다. (Redo log buffer 는 불가능)

- ASMM 이 SGA 의 양을 자동으로 할당하고 관리 할 때 기준으로 사용하는 파라미터가 SGA_TARGET 이다. 이 파라미터에 설정된 용량의 범위 안에서 메모리를 할당하고 관리를 하게 된다.

- SGA_TARGET 파라미터는 SGA_MAX_SIZE 의 값을 초과할 수 없다.

- ASMM 기능을 사용하기 위한 조건 :

* STATISTICS_LEVEL 을 TYPICAL 또는 ALL 로 설정

* SGA_TARGET  파라미터의 값을 0 보다 큰 값으로 설정

* 다른 파라미터의 값들을 0 으로 설정

=> 만약, 다른 파라미터의 값들 또한 0 보다 큰 값으로 설정을 하면, 해당 파라미터의 값이 최소값으로 인식을 하게 된다. 예를 들어, SGA_TARGET=2G 로 했는데, Shared_pool_size=100m 로 설정했다면, Shared_pool_size 의 최소값은 100m 가 된다.

- SGA_TARGE 값으로 자동 튜닝이 되는 파라미터 (Auto-Tuned dynamic parameter) :

DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE, STREAMS_POOL_SIZE

- SGA_TARGE 값으로 사용자가 바꿔주는 수동 파라미터 (Manual-Tuned parameter) :

DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE, DB_nK_CACHE_SIZE, SGA_TARGET

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

<AMM (Automatic Memory Management )>

- 11g 의 SGA 와 PGA 를 한꺼번에 자동으로 관리하는 기술  

- AMM 에서 새로 생긴 2개의 파라미터는 아래와 같다.

* MEMORY_TARGET : 이 파라미터로 AMM 기능으로 관리할 메모리의 총 량을 지정할 수 있다. 이 파라미터의 최대 설정값은 MEMORY_MAX_SIZE 파라미터 값 까지 지정할 수 있다. 기본값은 0 이며, 이 뜻은 이 기능을 사용하지 않는다는 의미이다.

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

- AMM 기능을 사용하게 된다면, SGA_TARGET 이나 PGA_AGGREFATE_TARGET 파라미터의 값을 0으로 셋팅하는 것이 좋다. 민약 이 값들을 지정하게 된다면, 오라클은 그 값을 최소값으로 인식하게 된다.

- AMM 기능을 사용하기 위해서는 물리적인 메모리가 충분한 여유공간이 있어야 하며, 만약 메모리 공간이 부족할 경우 에러가 발생한다. AMM 은 /dev/shm 공간을 공유 메모리 공간과 매핑시켜서 메모리를 디스크 처럼 사용하게 되는데, 기본 크기는 OS 메모리의 50% 로 설정이 된다.

- 만약 피지컬 메모리가 부족할 경우 oracle startup 할 시에 ORA-00845 에러를 발생한다.