Subject : Solaris & Oracle 에서 SHARED MEMORY REQUIREMENT

----------------------------------------------------------------------------

Oracle은 Unix에서 Process와 SGA(System Global Area) 즉 Oracle dbms resource
영역간의 Communication을 위해 shared memory와 semaphores을 사용한다.
Oracle instance가 올라올 때, 즉 Dbms Engine이 Start될 때 Main Memory상의
특정 영역을 Dbms의 특정 영역으로 활당한다. 만약 특정영역 즉 Shared Memory가
Dbms가 요구하는 SGA 영역보다 적다면 Dbms Engine이 올라갈 때 shared memory 또는
semaphores 관련된 Error가 발생하면서 Fail이 날 것이다.

다음은 작은 용량의 즉 Axil320 등과 같은 Desktop Model 등급 기종에서의
shared memory와 semaphores의 recommend하는 Size와 Setting의 예를 들어 보았다.
하지만 필요하다면 Oracle Engineer 협조하에 Dbms init file의 SGA영역 즉 각종 
Segment 와 Buffer Size 등 Oracle에 관련된 Info가 필요하다.

Solution Description:
=====================

SGA는 System shared memory 내에 차지한다. 그러므로 전체의 SGA에 주소할당을
위해서는 Shared Memory가 각각의 Oracle Process에 유효하여야 한다.
다음은 Shared Memory 와 Semaphore관련된 Parameter를 정의 하였다.

SHMMAX = The maximum size(in bytes) of a single shared memory segment.
SHMMIN = The minimum size(in bytes) of a single shared memory segment.
SHMMNI = The number of shared memory identifiers.
SHMSEG = The maximum number of shared memory segments that can be attached
         by a process.
SEMMNS = The number of semaphores in the system.
SEMMNI = The number of semaphore set identifiers in the system; determines
         the  number of semaphore sets that can be created at any one time. 
SEMMSL = The maximum number of sempahores that can be in one semaphore set.
 It should be same size as maximum number of Oracle processes
 (The PROCESSES parameter in the init.ora file).

Recommended Semaphore and Shared Memory Parameters

Operating System        Shared Memory Parameters           Semaphore
----------------        ------------------------           ---------
Sun OS                  SHMSIZE = 32768                    SEMMNS = 200
                        SHMMNI = 50                        SEMMNI = 50

Solaris                 SHMMAX = 8388608                   SEMMNS = 200
                        SHMSEG = 20                        SEMMSL = 50
                        SHMMNI=100                         SEMMNI = 70


    Setting the Shared Memory and Semaphore Parameters

shared memory 와 semaphore parameter는 당신의 Kernel Configuration file 즉
/etc/system file에서 정의하고 Sizing할 수 있다.

다음과 같이 현재의 Parameter 값을 확인 할 수 있다.

      % sysdef | more

Example, using Solaris 2.3/2.4 parameters and commands:
--------------------------------------------------------

/* Oracle Dbms Shutdown */

 1. Log into SQLDBA and type:                
  SQLDBA> shutdown
  SQLDBA> exit

/* Shared Memory & Semaphore Parameter 정의 */

 2. Log in as the superuser (root) and:
  # cd /etc/system

 3. Add the following lines to the /etc/system file:

                set shmsys:shminfo_shmmax=8388608
                set shmsys:shminfo_shmmin=1
                set shmsys:shminfo_shmmni=100
                set shmsys:shminfo_shmseg=20
                set semsys:seminfo_semmns=200
                set semsys:seminfo_semmni=70

/* Reconfigurate Reboot */

 4. Reconfigure the kernel:
  # touch /reconfigure

 5. Reboot the machine:
  #init 6

/* Dbms Startup */

 6. Log into SQLDBA and type:
   SQLDBA> startup
   SQLDBA> exit

Oracle SGA의 Size는 System의 Shared Memory 및 Semaphore의 Size에 제한되고
SGA관련 Dbms의 관련 Parameter는 Oracle의 init.ora file에서 정의되고
그것은 System 과 Oracle 모두 Performance에 영양을 준다.

----------------------------------------------------------------------------

Revision History

작성일자 : 97.03.10
작성자 : 이민호

수정일자 :
수정자 :