Oracle/Admin

2012.01.13 Admin 2일차(SGA, Shared Pool, Database Buffer Cache, Redo Log Buffer, Large Pool, PGA, User Process, Server Process, Dedicated Server, Shared Server, Background processes, DBWR, LGWR, SMON, PMON, CKPT)

에몽이ㅋ 2012. 1. 16. 10:59
모르는 용어는 http://gyh214.tistory.com/73 참조(비밀번호 oracle)

DB서버의 Memory Structure : SGA, PGA

PGA(Program Global Area) : 사용자가 DB서버에 접속했을때 DB서버측에서 그 사용자만 쓰라고 따로 allocate한 메모리공간 

SGA (System Global Area)  :
     여러 사용자가 공유하는 메모리 공간, 여러 사용자가 몰라면 latch를 배분해서 순서대로 처리( http://exem.tistory.com/145 참조 )
구성 :
   필수 : Shared Pool, Database Buffer Cache,  RedoLog Buffer, ....
   옵션 : Large Pool, Java Pool

특징 : dynamic(변경 후 db서버재시작없이 변경이 적용가능, redolog buffer 제회)
파라미터 : SGA_MAX_SIZE
단위 : granule (16MB or 4MB) ; SGA_MAX_SIZE > 1GB이면 16MB, 아니면 4MB(10g기준)
-----------------SGA필수구성요소-----------------
Shared Pool
파라미터 : SHARED_POOL_SIZE  
구성 : Library Cache(LC), Data Dictionary Cache(DDC)
   Library Cache : 가장최근에 사용한 SQL, PL/SQL statement의 정보저장, 실행계획저장(용어사전에서 execute부분 참조)
      구성 : Shared SQL area, Shared PL/SQL area, Parse Code, 실행계획
   Data Dictionary Cache(= Row cache) : Database Buffer Cache안에 있는 dictionary중에서 가장 최근에 사용한 dictionary'들'을 저장하는 공간

Database Buffer Cache(DB Cache) : datafiles로 부터 불러들어온 데이터블록을 저장하는 공간(LRU알고리즘이용)
   파라미터 : DB_BLOCK_SIZE
   * 초기에 한번 set되면 바꿀수가 없고, DB_BLOCK_SIZE에 의해 datafile의 블럭size와 Database Buffer Cache(DB Cache)의 블럭size가 동일하게 맞춰진다.(따로 바꾸는게 아니라 초기부터 datafile을 DB_BLOCK_SIZE를 보고 생성, 그래서 초기값은 바뀔 수가 없음)

Redo Log Buffer : database data block에 변경되는 모든 변화를 기록하는 공간(주목적은 recovery, dynamic하지 않음)
   파라미터 : LOG_BUFFER
---------------------------------------------------
-----------------SGA옵셔널구성요소-----------------
Large Pool
Used For
:
   Backup and restore operations
   RMAN
   Parallel execution message buffers
   I/O server processes
   Sesion memory(UGA) for the Shared Server
파라미터 : LARGE_POOL_SIZE
* Backup and restore기능을 담당하기때문에 optional이라도 거의 대부분 Large Pool존재
---------------------------------------------------

Process Structure
User Process : 사용자가 오라클 Application Program을 실행 시켰을 때 사용되는 프로세스 (sqlplus, todd, orance등등)
 

Server ProcessSQL>에서 수행하는 모든 문장을 오라클에게 전달해서 실행해줌( http://www.oracleclub.com/lecture/1891 참조 )
   ; 2가지 방식의 서버가 있는데 1) Dedicated Server,  2) Shared Server

1) Dedicated Server(줄여서 데디서버 라고도 한다) : Server Process의 종류 중 하나로 User Process가 Server Process에 접속하게 되면 새로운 Server Process를 만들어서 1:1 방식으로 운영되는 서버
   장점 : Server Process의 다른 방식인 Shared Server에 비해 관리가 쉬움
   단점 : 메모리 사용량이 크다
2) Shared Server(=MTS(Multi Thread Server)) : Server Process의 종류 중 하나로 하나의 Server Process를 여러 User Process가 공유해서 사용하는 것(반대 : Dedicated Server)
   장점 : 메모리 사용량이 적다
   단점 : Server Process가 죽으면 모든 User Process가 Rollback된다. (관리가 힘들다)

Background Process : maintains and enforces relationships between physical and memory structures
   DBWn, LGWR, PMON, SMON, CKPT가 필수로 구성되고,(필수구성요소중 하나라도 kill되게 되면 전체 DB가 꺼져버린다)
   ARCn, LMDn, RECO, CJQ0, LMON, Snnn, Dnnn, Pnnn, LCKn, QMNn 이 optional이다.

Background Process 구성요소
1) Database Writer(DBWn, DBWR)
DB Cache의 내용을 datafile에 저장해 주는 얘( http://www.oracleclub.com/lecture/1892 참조 )
   발생시기(언제 파일에 내려쓰느냐?) : checkpoint발생시, dirty buffers이 threshold에 도달했을때 (일반적으로 DB Cache의 1/3이 dirty일때),
            free buffer가 없을때, timeout 발생시 (일반적으로 3초), 
            RAC ping request is made, Tablespace OFFLINE, 
            Tablespace READ ONLY, Table DROP or TRUNCATE, 
            Tablespace BEGIN BACKUP

2) LGWR(=Log Writer) :  background process의 하나로 Redolog Buff의 내용을 Redo Log file에 저장하는 얘
http://www.oracleclub.com/lecture/1892 참조 )
   발생시기 : commit, redolog가 1/3찼을때,
          when there is 1MB of redo, every three seconds,
          Before DBWn writes 
   *   Before DBWn writes  와 관련해서 선로그기법 사용
   * 선로그기법(write-ahead protocol, write-ahead-log) :  
DBWn이 database file에 DB Cache의 내용을 내려적기 전에 항상 LGWR을 이용해서 redolog을 먼저 redolog file에 저장한 후 database file에 저장하는 방식(log먼저 저장한다고 해서 선로그기법,참조:docs.oracle.com/cd/B10500_01/server.920/a96524/c09procs.htm )
---> database file에 내려적을때(DBWR)는 해당block통째로 file에 저장하는 반면, redolog file에 내려적을때(LGWR)는 변경된 내용만 저장하므로 DBWR보다 속도가 훨씬 빠르다.
---> 혹시나 database file에 db cache의 내용을 내려적다가 DB가 죽었을때를 대비해서 안정성을 위해 먼저 저장이 빨리되는 redo log파일을 먼저 저장하게 된다.  

3) SMON : background process의 하나로 서버의 Instance Crash이후 Instance Recovery시 활동하는 process ( 서버가 꺼지고 나서 그 다음에 뒷처리하는 얘,  http://www.oracleclub.com/lecture/1892 참조 )

4) PMON(Process Monitor) : 오라클에 서버에서 사용되는 각 프로세스들을 감시하는 프로세스. 
   비정상 종료된 데이터베이스의 접속을 정리, 
   정상적으로 작동하지 않는 프로세스들을 감시하여 종료 시키며, 
   비정상적으로 종료된 프로세스들에게 할당된 리소스를 재사용 가능하게 함( http://www.oracleclub.com/lecture/1080 참조 )
   * PMON의 rollback은 datafile에서 해당되는 블럭을 가져와 DB Cache에 블럭째로 덮어쓰기하는 방식으로 정상적인 rollback보다 부하가 상당히 크다.  

5) CKPT(Checkpoint) : Background process중 하나로 checkpoint신호를 생성하는 얘 ( http://www.oracleclub.com/lecture/1892 참조 )