반응형

(1) Oracle Server 전체 구조

Oracle 프로그램을 설치후 실행시키면 메모리와 디스크에 Oracle 만의 특별한 구조를 생성

이렇게 생성되는 구조를 Oracle Server 라고 함


메모리 부분에 생성되는 구조 (Instance)  ( Instance 구조는 오라클 버전에 따라 다르다 )


디스크 부분에 생성되는 구조 (Data base)

- 데이터가 저장되는 데이터 파일 (Data File)

- DB전체의 관리정보가 들어있는 컨트롤파일 (Control files)

- 장애 복구시 사용되는 리두 로그파일 (Redo log files)



                               <Oracle Server 구조>



위 그림을 좀 더 자세하게 살펴 보자


< Oracle Instance 와 Database >


(2)  Oracle Instance 의 할당 및 관리

Instance - SGA : 실제 작업들이 수행되는 공간

             - Background process : Oracle Server 가 잘 운영 되도록 데이터베이스와 인스턴스를 돌아다니면서

   데이터를I/O 해주는 역할(DBWn, LGWR, PMON, SMON, CKPT, ETC..)



Instance 생성 과정   

[ Oracle 데이터베이스가 종료되어있는 상태에서 관리자가 DB에 접속해서 ORACLE을 시작(Start up) 한다고 가정]


- Startup  요청을 받은 최초의 Oracle Server Process가 초기화 파라미터 (pfile 이나 spfile) 에 적혀있는 설정을 참고해 OS Kernel 에게 공유 메모리를 사용할 수 있도록 할당 요청

- 할당 요청을 받은 OS Kernel은 저장되어 있는 OS Kernel 파라미터를 조회해서 그 파일들에 설정되어 있는 공유 메모리를 할당      ( kernel - 리눅스 : /etc/sysctl.conf ,  솔라리스 : /etc/system 파일에 기록 )


요약 : 파라미터파일의 설정값을 커널에 요청 -> 커널에 설정되어 있는 값을 전송 ( ※ 요청값이 1G 인데 커널 설정이 500MB 만 허락하도록 되어있으면 1G 허락을 해주지않고 500MB 만 허락해줌 )


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


OS kernel 은 RAM의 일부를 Oracle에 할당해 준 후에도 해당 메모리 공간을 다른 프로그램이 사용할 수 없도록 관리함

하나의 메모리 블록을 여러 프로그램이 동시에 중복 사용하는 사태를 막기 위해 세마포어를 사용


세마포어 : 깃발이라는 뜻으로, 자원의 현재 사용여부를 표시

세마 포어는 보통 한개씩 쓰지않고 세트로 묶어서 여러 개씩 사용함


- 프로세스는 메모리 블록을 사용하기 전에 세마포어의 상태를 먼저 확인함. ( set 되어있을시 unset 될때까지 대기 or unset 되어있는다른 메모리블록을 찾음)

- 메모리의 중복 사용을 막기위해 세마포어를 set 상태로 해두고 다른 프로세스의 접근을 막는다.

- 메모리 블록이 unset 이 되면 프로세스는 해당 메모리 블록에서 작업을 수행할 수 있고 메모리 블록을 사용하게 되면 세마포어를 다시 set 상태로 세팅 


(3) SGA의 주요 구성 요소


1. Database Buffer Cache ★중요

데이터의 조회와 변경 등의 실제 작업이 일어나는 공간


- Pinned Buffer : 다른 사용자가 현재 사용중인 buffer 블록,  데이터 변경중 (commit, rollback 안된상태)

- Dirty Buffer : 다른 사용자가 내용을 변경후 저장하지 않은 buffer 블록, 데이터 변경완료 -> 저장 안함

(commit , rollback 된 상태)

- Free Buffer : 사용하고 있지 않은 buffer 블록 or Dirty Buffer 였다가 저장완료된 buffer 블록

데이터 변경완료 -> 저장 완료


예) 사용자 - 손님 , DataBase Buffer Cache - 매장, Database - 창고, Server Process - 직원

버퍼캐쉬에 데이터가 있을 때

사용자가 쿼리 날림 -> 서버 프로세스가 D.B 버퍼캐쉬에서 데이터 찾음 -> 데이터 출력

버퍼캐쉬에 데이터가 없을 때

사용자가 쿼리 날림 -> 서버 프로세스가 D.B 버퍼캐쉬에서 데이터 찾음 -> 데이터 없어서 서버프로세스가 D.B로 가서 데이터 찾음 -> 찾은 데이터 D.B 버퍼캐쉬로 복사 -> 출력


버퍼 블록들의 상태를 관리 - LIST 를 만들어 사용


LRU 알고리즘 : SGA가 100MB 인데 변경 하려는 자료가 150MB 일경우 SGA의 일부분을 덮어 써야 하는데 이럴 경우 가장 사용이 안된것을 덮어쓰는 알고리즘


LIST : 버퍼 블록의 사용여부가 적혀 있음 ( 한번에 한명만 볼 수 있음)

- LRU List

- 메인 리스트 : 사용된 buffer 리스트

   ★- 서브 리스트 : 미 사용된 buffer 들이나 , DBWR 에 기록된 buffer 리스트 ( Free list )

- LRUW List

   ★- 메인 리스트 : 변경된 buffer 들의 리스트 ( Dirty list )

      - 서브 리스트 : 현재 DBWR 에 기록중인 buffer 리스트


LATCH : 번호표 의 의미 , 프로세스가 한꺼번에 사용하려고 할 때 순서를 관리해주기위해 사용


2. Redo Log Buffer

- 데이터 변경사항을 기록  (장부, 일지)

Redo : 작업을 했는데 문제가 생기면 다시 작업 

Undo : 작업을 했는데 문제가 생기면 취소 ( rollback )



3. SGA

SGA 각 구성요소의 크기에 따라 오라클 성능이 달라짐


대체로 성능을 높이기 위해 Database Buffer Cache 의 크기를 높여주면 빨라짐

Database Buffer Cache 의 크기를 100MB로 변경할 경우

SYS> alter system set DB_CACHE_SIZE=100M ;


메모리 관리 방법

 8i

 9i 

 static 

 dynamic 

 메모리 변경후 재부팅 해야 적용

 메모리 변경후 즉시 적용 

 

 

 


그래뉼 - 오라클에서 만든 메모리를 할당하는 새로운 단위 

4. PGA

프로세스들이 개별적으로 사용하는 메모리 공간


오라클 메모리 - SGA = 공유해서 사용  ex) 운동장

                     - PGA = 개별 사용  ex) 사물함


반응형

'오라클 > 관리 실무' 카테고리의 다른 글

Oracle 저장구조  (0) 2014.10.23
Tablespace 와 Data File 관리하기  (2) 2014.10.21
Redo Log 관리하기  (0) 2014.10.20
Control File 관리하기  (0) 2014.10.20
ORACLE 시작하기 & 종료하기  (0) 2014.10.20
Oracle Background Process  (0) 2014.10.17
SQL 문장의 실행 원리  (0) 2014.10.17

+ Recent posts