시스템 글로벌 영역(System Globle Area)

  • 모든 오라클 프로세스가 여러 경로를 통해 접근할 수 있는 공유 메모리 구조.
  • SGA는 다양한 크기로 존재한다.
  • 오라클 데이터 베이스는 인스턴스가 STARUP할때나 Shutdown할때 자동적으로 sga에게 메모리를 할당.

os 상에서 shared memory 확인

r3dev:/>ipcs |grep ora
m 4194308 0x6f9a1cb0 --rw-r


- oraprd dba -shared memory 를 4MB 가량 사용중
m 6291571 0x4a0d5134 --rw-r
- orabwd dba --shared memory 를 6MB 가량 사용중
m 10485882 0x8ad06498 --rw-r
- oraupd dba --shared memory 를 10MB 가량 사용중
q : message queue
m : shared memory segment
s : semaphore

nattch : 해당 영역에 붙어있는 프로세스 숫자

V$SGASTAT를 사용해서 SGA 확인


scott@DEV> compute sum of bytes on pool
scott@DEV> break on pool skip 1
scott@DEV> 
scott@DEV> select pool, name, bytes
2 from v$sgastat
3 order by pool, name; 

POOL         NAME                            BYTES
------------ -------------------------- ----------
java pool    free memory                  33554432
************                            ----------
sum                                       33554432 
    
shared pool  1:kngisga                       32088
             AQ Propagation Scheduling       16000
             ASH buffers                  16252928
             ASM file                        19200
             ASM map operations               3616
             ASM rollback operations          2592
             AW SGA                             40
             AWR Table Info (KEW layer         872
             Active Session History -         1528
             Alert log                         264
             ArchLog Dest Array               7656
             Array of cached attr              400
             Auto tune undo info                96
             BRANCH TABLE SEGMENTED AR      276576
             Background process state           48
             Banner Storage                   2048
             CCursor                      15077424
                               .
                               .
                               .           
             trace events array              68000
             trace_knlasg                      504
             transaction                    620720
             trigger condition node             72
             trigger defini                    272
             trigger inform                    728
             trigger source                    152
             txncallback                     54208
             type object de                  20192
             where to latch num map           7304
             work area tab                  270144
             writes stopped lock conte          48
             writes stopped lock state          48
             x$ksmfs table                      24
             x$rule_set                      17608
************                            ----------
sum                                     1040192184 
    
             buffer_cache               5251268608
             fixed_sga                     2093456
             log_buffer                   14680064
************                            ----------
sum                                     5268042128 
    
   

SGA의 대표적인 pool

  • Java Pool
    : java pool은 데이터베이스에서 JVM이 실행되는 동안 할당하는 고정된 메모리 공간을 뜻한다.
    오라클 10g에서 java pool은 데이터베이스가 시작하여 운영되는 온라인 상황에서 크기를 조장할 수 있다.
  • Large Pool
    : large pool은 shared server 커넥션 환경에서 세션별로 할당할 메모리를 위해 활용 되는데,
    메시지 버퍼를 위한 병렬 실행 기능, 디스크 I/O버퍼를 위한 RMAN백업 등에 활용된다.
    온라인에서 크기 조정이 가능하다.
  • Shared Pool
    : shared pool은 공유 커서, 공유 프로시저, 고정 오브젝트, 딕셔너리 캐시와 수십개의 많은 데이터들을 포함하고 있다.
    10g와 9i에서는 온라인 상태에서 크기 조정이 가능하다.
  • Streams Pool
    : Stream pool은 오라클 스트림이 독점적으로 사용하고 있는 메모리다. 오라클 10g에서 새롭게 선보인 pool이며,
    온라인 상에서 크기 조정이 가능하다.
  • Null pool
    : 이 메모리는 블록 버퍼, Redo Log Buffer 그리고 fixed SGA영역을 포함한다.

위의 풀들의 정보를 보기 위해서 V$SGASTAT 뷰로 확인할 수 있다.

SGA전체 크기에 가장 영향을 많이 미치는 파라미터

  • JAVA_POOL_SIZE : Java pool의 크기를 제어
  • SHARED_POOL_SIZE :shared pool의 크기를 일정 수준까지 제어
  • LARGE_POOL_SIZE : large pool의 크기를 제어
  • DB_*_CACHE_SIZE : 여덟가지 종류의 cache_size 파라미터는 다양한 버퍼 캐시에서 가용한 메모리 크기를 제어
  • LOG_BUFFER : 리두 버퍼의 크기를 일정 수준까지 제어
  • SGA_TARGET : 오라클10g 이상에서 자동 SGA 메모리 관리기법을 사용할 때 적용
  • SGA_MAX_SIZE : 데이터베이스가 가동 중인 상태에서 SGA의 크기를 재조정할 수 있는 최고값을 제어할때 사용
  • MEMORY_TARGET : 자동 메모리 관리환경에서 사용(PGA,SGA를 자동 메모리 관리로 사용)
  • MEMORY_MAX_SIZE : 오라클이 자동 메모리 관리 상에서 PGA와 SGA의 크기를 제어하기 위해 참고용으로 사용하는 메모리량의 최대값을 제어할 때 사용.
    9i : SGA구성요소 모두 수작업
    10g : 자동 SGA메모리 관리가 수작업을 최소화
    11g : 자동 메모리관리(SGA,PGA의 최적의 크기를 결정, 이미 할당된 메모리도 자동으로 재분배)

granule(알갱이)

  • 메모리에 대한 최소 할당단위(4MB,8MB,16MB단위의 메모리 영역)
  • 자동 or 수동메모리 상관없이 SGA내 다양한 pool에 granule단위로 메모리를 할당
  • v$SGA_DYNAMIC_COMPONENTS 뷰를 조회하여 확인
  • SGA크기에의해 granule크기가 결정
    SQL> -- PGA영역 사이즈 확인

sys@BWD> show parameter sga_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 256M
sys@BWD> select component, granule_size from v$sga_dynamic_components;

COMPONENT                                                        GRANULE_SIZE
---------------------------------------------------------------- ------------
shared pool                                                          4194304
large pool                                                           4194304
java pool                                                            4194304
streams pool                                                         4194304
DEFAULT buffer cache                                                 4194304
KEEP buffer cache                                                    4194304
RECYCLE buffer cache                                                 4194304
DEFAULT 2K buffer cache                                              4194304
DEFAULT 4K buffer cache                                              4194304
DEFAULT 8K buffer cache                                              4194304
DEFAULT 16K buffer cache                                             4194304
DEFAULT 32K buffer cache                                             4194304
ASM Buffer Cache                                                     4194304

13 rows selected.

  • SGA크기가 1GB이하일때
  • granule 크기는 4MB * SGA크기가
    1GB를 넘는 어떤임계치(운영체제,릴리즈간 차이가 있다)까지 증가할때 granule 크기도 증가


sys@BWD> create spfile from pfile;

File created.

sys@BWD> startup force;
ORACLE instance started.

Total System Global Area  268435456 bytes
Fixed Size                  2083368 bytes
Variable Size             104859096 bytes
Database Buffers          159383552 bytes
Redo Buffers                2109440 bytes
Database mounted.
Database opened.
sys@BWD> alter system set sga_target = 1512m scope=spfile;

System altered.

sys@BWD> startup force
ORACLE instance started.

Total System Global Area 1593835520 bytes
Fixed Size                  2084368 bytes
Variable Size             201327088 bytes
Database Buffers         1375731712 bytes
Redo Buffers               14692352 bytes
Database mounted.
Database opened.
sys@BWD> show parameter sga_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 1520M
sys@BWD> select component, granule_size from v$sga_dynamic_components;

COMPONENT                                                        GRANULE_SIZE
---------------------------------------------------------------- ------------
shared pool                                                          16777216
large pool                                                           16777216
java pool                                                            16777216
streams pool                                                         16777216
DEFAULT buffer cache                                                 16777216
KEEP buffer cache                                                    16777216
RECYCLE buffer cache                                                 16777216
DEFAULT 2K buffer cache                                              16777216
DEFAULT 4K buffer cache                                              16777216
DEFAULT 8K buffer cache                                              16777216
DEFAULT 16K buffer cache                                             16777216
DEFAULT 32K buffer cache                                             16777216
ASM Buffer Cache                                                     16777216

13 rows selected.


  • 1.5GB의SGA에서 pool들은16MB granule을 사용하여 할당할것이며 확정된pool의 크기는16MB의 배수가 될 것.

※소스다운로드