목차

Oracle SGA(System Global Area)

초기화 파라메터

SGA_MAX_SIZE

SGA_MAX_SIZE SGA 전체의 최대크기, SGA 관련파라메터들은 SGA_MAX_SIZE 한도 내에서 크기를 변경할 수 있다.
ALTER SYSTEM 명령으로 시스템 재시작없이 동적으로 변경할 수 있다.
Dynamic SGA

Oracle 10g에서 Dynamic SGA를 사용할 수 있는 파라메터

  1. DB_CACHE_SIZE
  2. LOG_BUFFER
  3. SHARED_POOL_SIZE
  4. LARGE_POOL_SIZE
  5. JAVA_POOL_SIZE

SGA 파라메터 크기 변경

  1. SGA 파라메터의 크기를 늘려주기 위해서는 필요한 만큼의 Free Granule이 존재해야만 하며,
    현재 사용하고 있는 SGA의 크기가 SGA_MAX_SIZE보다 작어야 한다.
    ALTER SYSTEM SET DB_CACHE_SIZE=1024M SCOPE=SPFILE;

Granule

  1. Granule은 가상 메모리 상의 연속된 공간으로 , Dynamic SGA 모델에서 할당할 수 있는 최소 단위 이다.

Startup SGA 설명

SQL> show sga
Total System Global Area  926941184 bytes
Fixed Size                  1222648 bytes
Variable Size             243271688 bytes
Database Buffers          675282944 bytes
Redo Buffers                7163904 bytes
Total System Global Area SGA를 구성하는 영역크기의 합계로 SGA_MAX_SIZE 파라메터로부터 영향을 받는다
Fixed Size 데이터베이스나 인스턴스의 상태를 저장하는 영역으로, 백그라운드 프로세스가 액세스하는 영역이다
Variable Size 이 영역의 크기는 SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE 파라메터로부터 영향을 받는다
Database Buffers 데이터파일로 부터 읽어들인 데이터 블록 내용을 저장하는 영역으로 DB_CACHE_SIZE 파라메터의 영향을 받는다
Redo Buffers 데이터베이스에 가해진 모든 변경사항에 대한 내역을 저장하는 Redo Log Buffer의 크기를 LOG_BUFFER 파라메터로부터 영향을 받는다

ASMM

  1. ASMM은 Automatic Shared Memory Management(자동 공유 메모리 관리)의 약자이다.
  2. 데이타베이스가 동작하는 동안 여러 메모리 풀의 크기를 자동으로 조정하여 필요한 경우 메모리를 할당하거나 해제하는 역할을 담당합니다.
  3. ASMM을 사용하기 위해서는 SGA_TARGET 파라메터를 0보다 크게 설정하면 됩니다.
  4. shared pool, buffer cache, large pool, java pool에 대한 크기를 자동으로 관리하여 줍니다.
  5. SGA_TARGET 값은 SGA_MAX_SIZE 보다 크게 설정할 수 없습니다.
     SGA_MAX_SIZE >= SGA_TARGET 
  6. ALTER SYSTEM 명령으로 SGA_TARGET 값을 설정한 후, 모든 자동 조절 풀의 매개변수를 0으로 설정합니다.
    DB_CACHE_SIZE나 SHARED_POOL_SIZE를 0으로 설정하지 않는다면 해당 값이 하한 임계 값이 됩니다.
    ALTER SYSTEM SET SGA_TARGET=1024M SCOPE=BOTH;
    ALTER SYSTEM SET DB_CACHE_SIZE=0;
    ALTER SYSTEM SET SHARED_POOL_SIZE=0;

Database Buffer Cache

정의

  1. Database Buffer Cache는 Datafile들로부터 읽은 Data block의 복사본을 담고 있는 SGA의 한 영역이다.
  2. Oracle Instance에 동시 접속한 모든 User Process는 Database Buffer Cache에 대한 Access를 공유한다.
  3. Database Buffer Cache는 아직 디스크에 완전히 쓰여지지 않는 수정된 데이터를 보유할 수 있다.
  4. LRU(Least Recently Used) 알고리즘에 의해
    가장 오래전에 사용된 것을 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를 저장함으로써,
    디스크 I/O를 줄이고, 데이타베이스 시스템의 성능을 향상시킨다.
  5. DBWR(Database Writer Process)에서 관리된다.
  6. Free buffer는 오라클 서버 프로세스에 할당되어 사용되고,
    사용후 Dirty Buffer가 된 Buffer들은 DBWR에 의해 디스크에 쓰여진 후 다시 Free Buffer가 되어
    오라클 서버 프로세스에 의해 재사용되는 작업을 반복하게 된다.

Redo Log Buffer

  1. Redo Log Buffer는 데이터베이스의 일어난 모든 변화를 저장하는 메모리 공간입니다.
  2. Redo Log Buffer에 저장된 리두 항목들은 LGWR에 의해 데이터베이스 복구에 사용되는 Online Redo Log File에 저장됩니다.
  3. LOG_BUFFER 파라메터로 Redo Log Buffer의 크기를 정합니다.
  4. Redo 정보는 항상 실제 변경작업보다 먼저 보관되어야 어떤 상황에서도 복구가 가능합니다.
    따라서 트랜잭션을 수행하는(데이터베이스 블록에 변경을 가하는) 프로세스는 우선 자신의 메모리 영역 내에서 수행하고자 하는 작업에 대한 Redo Record에 담긴 내용을 따라 적용하게 됩니다.
    또한 같은 이유로 오라클은 변경된 Buffer Cache Block을 디스크에 기록하기 전에 먼저 관련된 로그버퍼를 로그파일에 기록하는 작업을 처리합니다.

Shared Pool

정의

  1. Shared Pool은 Library Cache, Dictionary Cache, Control Structures를 포함하는 SGA의 영역 입니다.
  2. Shared Pool은 하나의 데이터베이스에 행해지는 모든 SQL 문을 처리하기 위하여 사용됩니다.
  3. Shared Pool은 문장을 실행하기 위해 그 문장과 관련된 실행계획과 구문분석 정보가 들어가 있습니다.
  4. Shared Pool의 사이즈는 SHARED_POOL_SIZE 파라메터 값으로 결정된다.

Library Cache

  1. Library Cache는 사용자가 요청한 SQL문장을 Server Process가 여러단계를 거쳐 작업을 할때 사용하는 작업공간이다.
  2. Library Cache는 Shared Pool 영역과 PL/SQL 영역으로 나누어 볼 수 있다.
  3. 오라클의 모든 SQL은 Shared SQL 영역과 Private SQL 영역에서 수행된다.
    만약 두명의 사용자가 같은 SQL문을 사용할 경우 Shared SQL 영역을 재사용하여 자원을 절약합니다.
    그리고 사용자는 Private SQL 영역에 복사본을 보유하게 된다.
Shared SQL Areas 공유 SQL 영역에는 SQL문에 대한 텍스트, 파스 트리, 실행계획 등을 저장하고 있다.
동일한 문장이 다음번에 실행되면 Shared SQL 영역에 저장되어 있는 실행계획과 파스트리를 그대로 이용하기 때문에 SQL문장의 처리속도는 향상된다.
Shared PL/SQL Areas 가장 최신에 실행한 PL/SQL 문장을 저장하고 공유한다.
파싱 및 컴파일 된 프로그램 및 프로시져(Function,Package,Triger)가 저장된다.

Dictionary Cache

  1. Dictionary Cache는 데이터베이스 테이블과 뷰에 대한 정보, 구조, 사용자 등에 대한 정보가 저장된다.
  2. 오라클은 SQL문을 Parsing하는 과정에서 Data Dictionary를 빈번하게 Access합니다.
    즉, 자주 Access되는 Data Dictionary 정보를 Dictionary Cache에 저장하여 관리합니다.
  3. Dictionary Cache는 모든 Oracle User Process에 의해 공유 됩니다.

Large Pool

  1. SGA를 구성하는 메모리으로 대용량 메모리를 할당할때 사용한다.
  2. Shared Server를 사용하지 않는다면 Large Pool을 최소로 설정한다.
  3. LARGE_POOL_SIZE 파라메터로 Large Pool의 크기를 설정할 수 있다.

사용목적(대용량 풀)

  1. I/O 서버 프로세스 및 Shared Server와 Oracle XA(Middleware를 이용한 효과적인 Resource 관리)에 대한 세션 메모리를 제공한다.
  2. Oracle 백업 및 복원 작업에 대한 대용량 메모리 할당에 이용된다.

Java Pool

  1. Oracle JVM(Java Virtual Machine)에 접속해 있는 모든 세션에서 사용하는 자바코드가 사용하는 메모리 영역이다.
  2. Java Pool은 JAVA_POOL_SIZE 파라메터로 크기를 설정한다.

Streams Pool

  1. 10g 부터 나타난 풀 개념이다.
  2. 오라클 스트림(다른 DB로 데이터 전달)에서 사용하는 메모리 영역으로 STREAMS_POOL_SIZE 파라메터로 크기를 설정한다.