본문 바로가기

Program/Oracle

[Oracle] Oracle Server Process & Background Process

정성 가득한 글을 작성하신 원작자님께 감사드린다.

출처 : http://blog.naver.com/zoshstbt/50131546086





1. Server Process

User Process로부터 쿼리를 받아서 처리하는 역할을 한다.

Server Process 1개당 1개의 PGA를 사용한다.

  • PGA(Program Global Area)
    • User Process의 쿼리 중 order by와 같은 추가적인 작업이 필요할 경우 Server Process는 자신의 PGA에서 해당 작업을 수행한 후 User Process에게 Fetch를 수행한다.

Dedicated Server

  • User Process 1개당 Server Process 1개가 매칭되는 방식
  • 관리가 쉽다.

 


Shared Server

  • Server Process 1개가 모든 User Process를 담당하는 방식 (1:M)
    • MTS(Multi Thread Server)
  • Server Process가 1개 이므로 PGA도 1개를 사용하기 때문에 메모리 사용률이 좋다.
  • Server Process에 문제가 발생되는 경우 다른 모든 User Process가 영향을 받는다.(Rollback)
  • 관리하기 어렵다.

 



2. Background Process

Instance와 Database 사이에서 oracle을 운영하는데 필요한 작업들을 보이지 않게 수행해주는 프로세스


Mandatory Background Process (필수 프로세스: 1개의 Process라도 문제가 발생되면 Database가 강제로 종료된다)

  • DBWR
  • LGWR
  • SMON
  • PMON
  • CKPT

Optional Background Process

  • ARCn / LMDn / RECO
  • CJQ0 / LMON / Snnn
  • Dnnn / Pnnn /
  • LCKn / QMNn

2.1 DBWR(Database Writer) / DBWn

Database Buffer Cache에 저장된 변경된 내용을 Disk의 Data File에 써넣는 기능을 한다.

  • Data File로부터 Database Buffer Cache로 block을 읽어오는 기능 : Server Process
  • Database Buffer Cache로부터 Data File로 block을 써넣는 기능 : DBWR

DBWR Process는 기본적으로 DBW0 Process 하나가 동작하지만 I/O 발생에 양에 따라서 DBW1 ~ DBW9 까지 추가로 실행될 수 있다.(동시에 총 10개의 Process가 동작할 수 있다.)


DBWR Process가 Data File로 써넣는 작업을 하는 경우

  • Checkpoint 신호가 발생했을 때
  • Dirty Buffer가 임계값을 지났을 때
  • Free Buffer의 양이 1/3 정도가 되지 않을 때
  • Time out이 발생했을 때(3초)
  • RAC Ping이 발생했을 때
  • Tablespace가 Read only 상태로 변경 될 때
  • Tablespace가 offline 상태가 될 때
  • Tablespace가 begin backup 상태가 될 때
  • Drop table이나 Truncate table 이 수행될 때



2.2 LGWR(Log Writer)

Redo Log Buffer의 내용을 Redo Log File로 저장한다.


LGWR Process가 Redo Log File에 써넣는 작업을 하는 경우

  • commit이 발생하는 경우
  • Redo Log Buffer의 1/3이 채워졌을 때
  • 변경량이 1MB가 되는 경우
  • 3초에 한번씩
  • DBWR이 내려쓰기 전에
  • 일반적으로 사용자가 commit 명령을 실행하면 Oracle Server에서는 바로 Disk의 Data File에 저장되는 것이 아니라, LGWR Process에 의해서 Redo Log File에 저장되는 것이다.



2.3 SMON(System Monitor)

Oracle Server가 비정상적으로 종료되었을 경우(Instance Crash) Oracle Server가 다시 시작될 때(Startup) 정리안된 내용을 수정(저장 및 Rollback)하는 역할(Instance Recovery)을 한다.


SMON Process의 작업 순서

  • Startup 되면서 MOUNT -> OPEN 단계로 넘어가면 우선 Redo Log File에 있던 모든 내용으르 Data File에 전부 적용시킨다.(Roll Forward)
  • Database OPEN
  • Undo Segment를 확인하여 commit 안된 데이터는 취소시킨다.(Roll backward)
더이상 사용하지 않는 임시 Segment를 정리하고, 사용가능한 extent들을 병합한다.
  • Extent : block의 집합
  • Segment : Extent의 집합
  • Datafile : Segment의 집합

고장 및 인스턴스 복구 시 파일 읽기 오류나 오프라인 오류로 사용 불능 트랜잭션을 건너뛰면 테이블 스페이스 또는 파일을 온라인으로 설정할 때 사용불능이었던 트랜잭션을 복구하기도 함(실전 오라클 백업과 복구)



2.4 PMON(Process Monitor)

Listener가 User Process로부터의 요청을 받았을 때 PMON Process에게 Server Process 실행을 요청한다.

Server Process 들을 관리하는 대장 Process로서, Server Process들을 모니터링 하고있다가 문제가 발생하는 경우 후속처리를 해주는 역할을 한다.

  • 문제가 발생된 server process를 강제종료 시킨다.
  • commit 안된 상태의 server process는 Rollback 시킨다.
    • 정상적인 Rollback의 경우 Undo Segment로부터 덮어쓰지만, PMON Process에 의한 Rollback은 Disk File로부터 block을 다시 올리기 때문에 부하가 크다.
  • Database Buffer Cache의 block에 설정되어 있던 lock을 해제시킨다.
  • cpu, 메모리 등의 자원들을 반환한다.



2.5 CKPT(Checkpoint Process)

DBWR Process에게 checkpoint 시그널을 발생시키는 프로세스이며, data file 헤더와 control file에 checkpoint 정보를 기록한다.


checkpoint가 발생하게되면 Database Buffer Cache의 내용 중 저장되지 않은 block을 DBWR Process가 Data File에 저장을 하고, Redo Log Buffer의 내용 중 Redo Log File에 저장 안된 내용을 LGWR Process가 저장을 한다.


checkpoint가 발생하는 경우

  • Log switch가 발생하는 경우
  • DBA가 수동으로 발생시키는 경우
    • alter system checkpoint

checkpoint 수행단계

  • 인스턴스 상태 엔큐 획득
    • checkpoint 수행시 Database가 OPEN임을 확인한다
  • 현재 checkpoint 정보 캡처
    • 현재 checkpoint 시간, 활성 스레드 정보, checkpoint를 실행하는 현재 스레드, 복구시에 필요한 Redo Log 주소(RBA) 정보 세팅
  • Dirty Buffer 확인
    • Database Buffer Cache에서 Dirty Buffer를 스캔하여 찾고 marking해둔다.
    • Oracle 8i 버전부터는 큐를 사용하여 큐의 내용을 보면 Dirty Buffer를 확인할 수 있게 됨
  • 내려쓰기
    • DBWR은 3단계에서 확인된 Dirty Buffer를 내려쓴다. CKPT Process는 이 과정이 끝날 때까지 계속 완료 여부를 확인하게 된다.
  • Data File과 Control File Header 업데이트
    • 4번째까지 완료되면 2번째 단계에서 확인한 checkpoint SCN 정보를 CKPT가 업데이트하고 완료한다.
(실전 오라클 백업과 복구)



출처 : http://blog.naver.com/zoshstbt/50131546086