Oracle 10g 강좌
The SGA_MAX_SIZE Initialization Parameter 6 2 29,824

by 김정식 SGA_MAX_SIZE GRANULE ALTER SYSTEM [2006.04.10]


SGA_MAX_SIZE

  SGA_MAX_SIZE는 SGA 전체의 최대 크기를 설정하며, SGA관련 파라미터들은 SGA_MAX_SIZE 한도 내에서 파라미터의 크기를 변경할 수 있습니다.

  SGA_MAX_SIZE는 동적으로 변경이 불가능하며, 변경을 하려면 spfile일 경우 아래와 같이 수정 후 오라클을 재 구동하여야 합니다. pfile일 경우에는 파라미터 파일 수정후 오라클을 재 구동하면 됩니다.

   
SQL> ALTER SYSTEM SET SGA_MAX_SIZE = 1024m SCOPE=spfile;
    

  Oracle 9i 이후부터는 DBA가 ALTER SYSTEM 명령을 이용해서 SGA 파라미터의 크기를 동적으로 변경할 수 있게 되었습니다. 이 특정을 ’Dynamic SGA’라고 합니다.

  데이터베이스를 shutdown/startup 없이 작업이 가능 합니다.

  Oracle 10g에서 Dynamic SGA를 사용할 수 있는 SGA 관련 파라미터는 DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE등이 있습니다.

  SGA 파라미터의 크기를 늘려주기 위해서는 필요한 만큼의 Free Granule이 존재해야만 하며, 현재 사용하고 있는 SGA의 크기가 SGA_MAX_SIZE보다 작아야 합니다.

  아래는 DB_CACHE_SIZE를 동적으로 변경하는 예제 입니다.

 
SQL> ALTER SYSTEM SET DB_CACHE_SIZE=256M SCOPE=BOTH;  
    

ALTER SYSTEM 명령 뒤에 scope에 대하여..

  ① memory : 변경이 현재 상태에만 영향을 미치며, db가 restartup 되면, 변경 이전 값으로 돌아 갑니다.

  ② spfile : 변경 내용을 spfile에만 저장하고 현재 상태에는 영향을 미치지 않게 합니다. Static Parameter의 경우는 이 scope만 지정 가능 합니다. 즉, spfile을 사용하더라도 Static Parameter에 대해서는 DB운영중에 바로 값을 변경하여 Restart없이 반영하는 것은 불가능 합니다.

  ③ both : 변경 내용을 현재 상태에도 바로 반영하고, spfile에도 반영시켜, 이후 rebooting 시에도 영향을 미치도록 합니다.

Granule

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

  - 이 Granule의 크기는 SGA 전체의 추정 값 (SGA_MAX_SIZE)에 따라 다음과 같이 구분 됩니다.
    if estimated SGA size is < 1G 4MB else 16MB

  - Dynamic SGA를 사용할 수 있는 SGA관련 파라미터는 이 Granule 단위로 늘어나거나 줄어들 수 있습니다

DB Startup SGA 정보 설명

  ORACLE instance start 시점에 SGA 정보가 출력이 됩니다. 이때 출력되는 SGA 정보는 SQL*Plus에서 SHOW SGA 명령어로도 볼 수 있습니다. 각각의 Size가 무엇을 의미하는지 간단하게 알아 보겠습니다.

 
SQL> SHOW SGA;
  Total System Global Area  171966464 bytes
  Fixed Size                   787988 bytes
  Variable Size             145750508 bytes
  Database Buffers           25165824 bytes
  Redo Buffers                 262144 bytes  
    

Total System Global Area

  - SGA를 구성하는 영역 크기의 합계로 SGA_MAX_SIZE 파라미터로부터 영향을 받습니다.

Fixed Size

  - 데이터베이스나 인스턴스의 상태를 저장하는 영역으로, 백그라운드 프로세스가 액세스 하는 영역 입니다.

  - 사용자 데이터는 저장되지 않고, 일반적으로 100k 미만의 영역을 차지함

Variable Size

  - 이 영역의 크기는 SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE 파라미터로부터 영향을 받습니다.

Database Buffers

  - 데이터파일로 부터 읽어 들인 데이터 블록 내용을 저장하는 영역으로 DB_CACHE_SIZE 파라미터로부터 영향을 받습니다.

Redo Buffers

  - 데이터베이스에 가해진 모든 변경 사항에 대한 내역을 저장하는 Redo Log Buffer의 크기로 LOG_BUFFER 파라미터로부터 영향을 받습니다.

- 강좌 URL : http://www.gurubee.net/lecture/1885

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 굿잡 [2009.04.05 11:35:53]
잘 보았습니다. 감사합니다. 근데 LOG_BUFFER는 Dynamic SGA가 아닌 static 파라미터입니다. 저자분께서 실수하신 듯 하네요. 그리고 10gR1부터는 granule의 크기는 128MB가 아닌 1GB기준입니다. SGA가 1GB보다 크면 16MB 그렇지 않으면 4M가 됩니다. 물론 플랫폼에 따라 좀 다를 수는 있지만 일반적인 플랫폼 기준입니다.

by 김정식 [2010.08.04 20:06:09]
굿잡님의 설명이 맞습니다.
모두 수정하였습니다. 즐거운 하루 보내세요.. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입