Database/ORACLE_개인정리

[오라클 관리 정리] 1장 - 오라클 아키텍처

99iberty 2014. 12. 5. 16:50

 

 

1. 오라클 전체 구조

Oracle Server : 메모리와 디스크에 생성되는 구조

- 인스턴스     : 메모리 부분에 생성되는 구조

ü  SGA : Shared pool, 버퍼 캐쉬, 리두로그 버퍼로 이루어짐.

실제 작업들이 수행되는 공간

ü  백그라운드 프로세스

- 데이터베이스: 디스크 부분에 생성되는 구조

ü  데이터 파일 : 데이터 저장

ü  컨트롤 파일 : DB 전체의 관리정보 저장

ü  리두로그 파일 : 장애복구시에 사용되는 파일

 

 

 

 

 

 

 

 

 

 

1)     오라클 인스턴스 생성 과정

     오라클 서버 프로세스

초기화 파라미터(pfile, spfile) 참고하여 OS커널에 공유메모리 할당 요청.

     커널에서는..

-       OS 커널파라미터 조회해서, 그 파일들에 설정되어 있는 내용으로 공유메모리 할당하여 SGA 생성.

-       세마포어 설정값 기반하여 다른 prgm에서 사용 못하게 하는 등의 관리

     SGA 생성 후에는..

-       최초 생성은 서버 프로세스에 의해서지만.. 해당 프로세스 종료되어도 SGA는 종료되지 않음.

è  인스턴스가 종료되어야 SGA가 사라짐

-       만들어진 이후에는 OS 커널이 관리.

è  다른 PRGM이 사용할 수 없도록..

 

 

2)     공유메모리 관리

OS에서 제공

 

     세마포어 (Semaphore)

Flag의 의미. 어떤 자원의 현재 사용 여부 표현.

하나의 메모리 블록에 동시에 여러 프로세스가 액세스하면 커널 패닉이나 블루스크린이 발생할 수 있다네..(몰랐음..)

-       메모리 블록 사용 전에, 현재 사용중인지 알기 위해 해당 블록의 세마포어 상태를 확인

è  사용중(set 플래그 설정) : 프로세스는 대기를 하고 있다가 release되어 unset이 되는 순간 세마포어를 set으로 세팅하고 자원 사용 가능.

 

-       세마포어와 관련된 주요 커널 파라미터 (모두 리눅스 기준임.)

l  SEMMSL

세마포어 사용량이 많기 때문에 묶어서 세트로 사용.

하나의 세마포어 세트당 세마포어의 최대 가수 정의한 파라미터.

권장값 : P/SPFILE PROCESSES변수의 최대값에 10을 더한 값.

        기본값은 100이상 설정. (11g 150)

l  SEMMNI

OS 전체에서 설정 가능한 세마포어 세트의 최대 개수

권장값 : 100 이상

l  SEMMNS

OS 전체에서 사용 가능한 세마포어의 최대 가수.

SEMMNS >= SEMMSL * SEMMNI

l  SEMOPM

1call (1개의 시스템 호출)이 초당 호출 가능한 최대 세마포어 개수 정의.

1call을 통해 여러 개의 세마포어 지원 가능.

한 개의 세마포어 셋에서 가질 수 있는 세마포어의 최대값 -> SEMMSL 파라미터를 통해 정의됨.

권장값 : SEMMSL과 동일하게 설정 권장

                                해당 내용들이 어떻게 적용되었는지 확인하려면

 

                                [oracle@localhost ~]$ ipcs –ls

                    ------------- Semaphore Limits -------------

                    Max number of arrays = 128              <- SEMMNI

                    Max semaphores per array = 250          <- SEMMSL

                    Max semaphores system wide = 32000      <- SEMMSN

                    Max ops per semop call = 100            <- SEMOPM

 

 

-       세마포어 이외의 커널파라미터

l  SHMMAX

공유메모리 세그먼트의 최대 크기(바이트 단위) 정의.

ü  세그먼트란? : 커널이 서버프로세스에게 메모리 할당해주는 단위.

             (메모리블록 단위로 작게 여러 번 할당이 아니라 통으로 할당)

할당받은 메모리공간이 여러 세그먼트에 분리되어 있을수록 성능은 좋지 않음.

세그먼트를 크게 잡으면 메모리 낭비가 심해지게 됨.

ü  Kernel.shmmax 값이 너무 작은 경우..

è  ORA-12547 : TNS:lost contact

è  ORA-27123 : unable to attach to shared memory segment

ü  현재 설정된 shmmax 값 확인

                                [root@localhost ~]# cat /proc/sys/kernel/shmmax

                    2147483648   <-바이트 단위. 2GB

ü  SHMMAX 파라미터 변경 방법

A.     /proc 파일시스템에 변경사항을 직접 반영시켜 재부팅 없이 변경

# echo “숫자” > /proc/sys/kernel/shmmax

B.      Sysctl 명령어

# sysctl –w kernel.shmmax=숫자

C.      /etc/sysctl.conf 파일에 kernel 변수 값 추가

적용 : # sysctl -p

l  SHMMNI

공유메모리 세그먼트의 최대 개수.

디폴트값 : 4096 (충분함.)

확인방법 : # cat /proc/sys/kernel/shmmni

           4096

l  SHMALL

특정 시점에 시스템에서 사용 가능한 공유 메모리의 최대 크기(페이지 단위)

권장값 : ceil(SHMMAX/PAGE_SIZE)

디폴트값 : 2097152bytes

확인방법 : # cat /proc/sys/kernel/shmall

             2097152

l  SHMMIN

단일 공유메모리 세그먼트의 최소크기(byte)

l  SHMSEG

1개의 오라클 프로세스에 부여될 수 있는 공유메모리 세그먼트의 최대 개수.

SHMMNI는 시스템 전체에서 사용 가능한 최대 개수이고

 

해당 두 종류의 커널 파라미터들을 모두 확인한 후, 커널은 오라클에게 공유메모리 할당.

     단지 최대/최소를 정의한 것이지, 해당 값을 평균으로 사용하는 것은 아니다.

 

     커널이 공유메모리(오라클이 SGA로 사용할) 할당 방법

-       공유메모리로 사용할 물리적 메모리가 충분할 경우.

è  하나의 세그먼트에 전체 SGA가 할당

-       하나의 세그먼트에 다 할당할 수 없는 경우

è  연속된 여러 세그먼트로 분산시켜 할당

-       두번째 방법도 여의치 않을 경우

è  연속되지 않은 여러 세그먼트에 분산시켜 할당

     SGA fixed Area 부분은 반드시 전체가 하나의 세그먼트에 할당되어야 함.

이 방법으로 메모리 할당받아 SGA가 생성될 경우, SGA에서 작업하는 속도는 늦어지게 된다.

-> 메모리가 단편화되어 있다라고 하고, 메모리를 정리해서 연속적인 공간을 할당받을 수 있도록 해주어야 함.

 

 3)     SGA의 주요 구성 요소

SGA라는 공간은 ORACLE에서 거의 대부분의 작업이 일어나는 공간.


① Database Buffer Cache

- SGA의 중요 구성요소

- 디스크에 저장된 데이터를 조회하거나 변경하기 위해 해당 데이터파일의 블록을 복사 후 버퍼캐쉬 영역에 올림.

-> 이렇게 작업하는 이유는...

ㄱ. 속도 때문에

ㄴ. 다른 사용자와 공유 가능하기 때문에.

- 여러 사용자가 같은 메모리블록을 동시에 사용할 경우 커널 패닉같은 장애 발생 가능 -> 관리 필요.

- Database Buffer Cache Block 상태 분류 (A사용자가 사용하고자 할 때)

ㄱ. Pinned Buffer

타사용자가 현재 사용하고 있는 버퍼블록.

A 사용자는 사용불가.

ㄴ. Dirty Buffer

현재 작업은 진행되지 않지만, 변경 후 아직 데이터파일에 변경내용을 저장하지 않은 버퍼.

A 사용자는 사용불가.

ㄷ. Free Buffer

Unused 또는 Dirty였다가 하드에 저장완료되어 재사용 가능한 블록.

A 사용자는 사용가능.

- 버퍼캐쉬블록 관리 알고리즘

ㄱ. LRU List

. 메인리스트 : 사용된 버퍼들의 리스트. HOT/COLD 영역으로 나뉨.

. 보조리스트 : 미사용된 버퍼들이나, DBWR에 의해 기록된 버퍼들의 리스트(Free List)

ㄴ. LRUW List

. 메인리스트 : 변경된 버퍼들의 리스트(Dirty List)

. 보조리스트 : 현재 DBWR에의해 기록중인 버퍼들의 리스트

-> LRU + LRUW List = Working Data Set (혹은 Working Set)


② Redo Log Buffer

③ Shared Pool

④ Large Pool

⑤ Java Pool

⑥ Streams Pool

⑦ Fixed SGA