Oracle Database

버젼별 SGA 영역 메모리 관리기법 및 파라미터

화려한청춘·2014년 5월 12일·조회 21,961

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 에러를 발생한다.

 

댓글 4

로그인 후 댓글을 남길 수 있습니다.

  • 강철지그강철지그· 2014년 5월 12일
    Java Pool 이라는 것은 어떤 용도일까요?
  • 강철지그강철지그· 2014년 5월 17일
    오라클에 설정할 SGA 메모리를 어떤 기준으로 산정해야 할 지 궁금합니다.
  • 화려한청춘· 2014년 5월 20일
    java pool 이란, 데이터베이스에서 자바 수행될수 있게 설정된 영역, 즉 Oracle JVM에 접속해 있는 모든 세션에서 사용하는 자바코드가 사용하는 메모리 영역을 말합니다. SGA 산정 기준 : SGA크기는 초기화 파라미터에의해 결정되며, 부분의 합이 총합(sga_max_size) 보다 크면 DB 시작하지 않습니다. DB_CACHE_SIZE: 표준 블록의 캐시 크기. 디폴트값 UNIX : 48MB, NT : 52MB LOG_BUFFER: 리두 로그 버퍼에 할당되는 바이트 수 SHARED_POOL_SIZE: 공유 SQL 및 PL/SQL에 제공되는 영역의 바이트 크기. 디폴트값 16MB, 64비트인 경우 기본 크기: 64MB LARGE_POOL_SIZE: 대용량 풀의 크기. 디폴트값 : 0 (init.ora 파일의 PARALLEL_AUTOMATIC_TUNING : TRUE로 설정되지 않았으면 디폴트 값은 자동계산됨) JAVA_POOL_SIZE: Java 풀의 크기. 디폴트값 : 24MB 따라서 SGA 크기는 SGA_MAX_SIZE - DB_CACHE_SIZE - LOG_BUFFER –SHARED_POOL_SIZE - LARGE_POOL_SIZE - JAVA_POOL_SIZE를 초과할 수 없습니다. 또한 SQL> show SGA;를 실행하면 메모리 할당 상태를 볼수 있습니다. SQL> show sga Total System Global Area 1219334144 bytes Fixed Size 2182056 bytes Variable Size 620758104 bytes Database Buffers 587202560 bytes Redo Buffers 9191424 bytes 1) Total System Global Area - SGA를 구성하는 영역 크기의 합계 (byte 단위) 2) Fixed Size - 데이터베이스나 인스턴스의 상태를 저장하는 영역으로, 백그라운드 프로세스가 액세스 하는 영역 3) Variable Size - init.ora 파일의 파라미터값 shared_pool_size large_pool_size java_pool_size 4) Database Buffers - 데이터파일로 부터 읽어들인 데이터 블럭 내용을 저장하는 영역. size = db_block_buffers * block size 5) Redo Buffers - 변경 사항에 대한 내역을 저장하는 영역. 1)= 2) +3) +4) +5)
  • 강철지그강철지그· 2014년 6월 4일
    화려한청춘/ 친절한 답변 고맙습니다~