[Oracle] Oracle Background Process

HYEOB KIM·2022년 10월 15일
0

Oracle

목록 보기
6/58

이전 포스트 : [Oracle] Select 문장의 실행 원리
다음 포스트 : [Oracle] Oracle 시작/종료하기

Oracle Background Process

Background Process: Oracle Server가 시작되면 자동으로 시작되어 운영과 유지를 담당하는 프로세스

User Process, Server Process는 사용자가 접속하면 생성되고, 사용자가 접속을 종료하면 사라지게 되는 반면 Background Process는 Oracle Server가 시작되면 같이 시작되고, 종료되면 같이 종료됩니다.

필수 Background Process

필수 Background Process의 경우 프로세스에 문제가 발생하면 DB가 강제 종료될 수 있으므로 잘 관리해야 합니다.

DBWR(Database Writer)

DB Buffer Cache의 Dirty Buffer의 내용을 Data File에 저장하는 역할을 수행합니다.

dbwr는 아래와 같은 경우일 때 자신의 역할을 수행합니다.

  1. Checkpoint 신호가 발생 했을 때
  2. Dirty Buffer가 임계값을 지났을 때
  3. Time out이 발생 했을 때
  4. RAC Ping이 발생 했을 때
  5. Tablespace가 Read Only 상태로 변경될 때
  6. Tablespace가 offline될 때
  7. Tablespace가 begin backup 상태가 될 때
  8. Drop table이나 Truncate table될 때
  9. Direct Path Read/Write가 진행될 때
  10. 일부 Parallel Query 작업이 진행될 때

dbwr Background Process는 기본적으로 dbw0 하나가 작동하지만 멀티 프로세서 시스템에서는 dbw1 ~ dbw9 까지 사용해서 성능을 높일 수 있습니다.

LGWR(Log Writer)

트랜잭션이 발생하면 Server Process는 변경 사항을 Redo Log Buffer에 기록합니다. lgwrRedo Log Buffer에 있는 내용을 DatabaseRedo Log File에 기록합니다.
(Redo Log Buffer의 내용은 메모리에 있기 때문에 서버가 꺼지면 내용이 다 날아갈 수 있으므로 안전하게 Redo Log File에 저장하는 것입니다)

lgwr는 아래의 경우에 역할을 수행합니다.

  1. commit 발생
  2. 1/3이 찼을 때
  3. 변경량이 1M일 때
  4. 3초마다
  5. dbwr이 동작하기 전

한편 commit을 수행하면 디스크의 Data File이 변경되는 것이 아니라 Redo Log File에 기록됩니다(혼동하면 안됩니다). 왜 그럴까요?

오라클에서 데이터는 블록 단위로 옮겨집니다. 블록 안에서 특정 데이터가 변경되었다고 8K나 되는 블록 자체를 매번 기록하게 되면 성능이 많이 저하될 것입니다. 게다가 변경된 블록을 저장하기 위해 Data File에서 일치하는 블록을 찾는 시간도 많이 소요될 것입니다. Redo Log File에는 차례대로 이어서 변경 사항을 기록하면 되기 때문에 빨리 기록될 수 있습니다.

Group Commit: 여러 사용자가 한꺼번에 commit을 했을 때 한꺼번에 Redo Log File에 기록하는 기법

만약 commit 요청이 들어왔는데 Redo Log File이 없을 경우 Alert Log 파일에 해당 에러 내용을 기록해두고 lgwr은 다음 commit 요청을 수행하지 않고 대기합니다.

PMON(Process Monitor)

모든 Server Process를 모니터링하고 비정상적으로 종료된 프로세스를 복구하는 등의 작업을 수행합니다.

예를 들어 어떤 Server Process가 비정상적으로 종료되었다면,

  • Server Process가 사용하고 있던 Transaction Table의 내용을 모두 Reset
  • Server Process가 사용하고 있던 Transaction ID를 시스템에서 제거
  • Server process가 점유하고 있던 Lock 해제

SMON(System Monitor)

smon의 업무는 아래와 같습니다.

  1. 인스턴스가 비정상 종료되었을 경우(Instance Crash) Instance Recovery 역할을 수행합니다.

  2. Instance Recovery 과정에서 누락된 Transaction을 Recovery

  3. 비정상 종료된 Transaction 이 사용하고 있던 Temporary Segment를 Clean up

  4. Dictionary Managed Tablespace에서 free extents들을 모아주는 역할

Instance Recovery

어떤 사용자가 test 테이블에 아래와 같이 작업했다고 합시다.

  1. A를 입력
  2. B를 입력
  3. commit
  4. C를 입력

그리고 이후에 인스턴스가 비정상 종료되었을 때 smonInstance Recovery를 수행합니다.

  1. 파라미터 파일을 읽어서 no mount 단계에서 Instance를 생성합니다.
  2. Mount 단계에서 Control 파일의 내용을 확인해 Instance Crash 상황임을 인지합니다.
  3. Redo Log File에서 내용을 읽고 1 ~ 4번까지의 작업을 다시 수행(Roll Forward)합니다.
  4. Database를 open합니다.
  5. commit 이후의 작업을 롤백(Roll Backward)합니다.

위 복구 과정은 Online Redo Log File에 내용이 있을 경우에만 가능하며 Archived Redo Log File에 내용이 존재할 경우 복구할 수 없습니다.

CKPT(Checkpoint)

dbwr에게 checkpoint 신호를 전달합니다.
(dbwr의 작동 조건은 checkpoint 신호를 받았을 때입니다)

Control File과 Data File Header에 checkpoint 정보를 저장합니다.

CheckPoint 정보

  • Checkpoint 위치
  • SCN
  • Redo Log 내용의 위치값

MMON / MMNL(Manageability Monitor Processes)

  • mmon: AWR(Automatic Workload Repository) 관련 다양한 작업을 수행합니다.
  • mmnl: ASH(Active Session History) 정보를 디스크로 옮기는 작업을 수행합니다.

RECO(Recover Process)

분산 DB 환경에서 Transaction 처리 도중 장애가 발생했을 때 Transaction을 복구시켜 주는 작업을 수행합니다.

선택 Background Process

ARCn(Archiver Processes)

Archive Log Mode로 데이터베이스를 운영할 경우 Online Redo Log File을 아카이빙 해 주는 작업을 수행합니다.
(Archive Log Mode가 아닐 경우에는 동작하지 않습니다)

CJQ0 & Jnnn(Job Queue Processes)

오라클에서 제공하는 Job 기능을 수행하는 프로세스입니다. Oracle Job이란 어떤 작업을 미리 정해진 시간에 정해진 옵션으로 예약해서 실행하게 해 주는 편리한 기능입니다(Like cron).

FBDA(FlashBack Data Archiver Process)

오라클에서는 Flashback을 수행할 때 Undo data를 이용하는 기능이 있는데 다른 프로세스가 Undo data를 덮어 써버릴 경우 Flashback을 수행할 수 없게 되는 단점이 있습니다.

FBDA11g부터 나온 Background Process로, 다른 프로세스가 Undo data를 덮어 쓰기 전에 아카이빙 해줍니다.


참고

  • <오라클 관리 실무> 서진수 지음
profile
Devops Engineer

0개의 댓글