ch3. Oracle Background Processes

 

  oracle server와 관련된 프로세스 종류

 user process

 사용자가 접속하면 생성되고,

 사용자가 종료하면 사라진다.

 사용자가 작성한 sql문장을 server process로 전달해주고 결과를 가져오는 프로세스

 server process

 user process가 전해준 SQL문장을 실제 수행하는 프로세스

 background process

 oracle server가 시작되면 함께 시작되고, oracle server가 종료되면 함께 종료된다.

 운영과 유지를 담당하는 프로세스.

 

1. 필수 Background process (Background Process가 하는일 ★★★)

(1) DBWR(Database Writer)(=DBWn)

: Database buffer cache에서 Dirty Block(변경완료 후 저장되어야 하는 블록)을 데이터파일로 저장하는 역할.

 → commit이 아니라 checkpoint명령어로 저장한다.

 - 기본적으로 DBW0 하나가 작동을 하지만, 여러개(DBW1~DBW9)를 최대 10개 동시에 사용하여 성능을 향상시킬 수 있다.

  (단일 프로세서의 시스템에서는 사용되지 못한다.)

 ★DBWR이 DB buffer cache의 Dirty buffer의 내용을 파일에 내려쓰는 경우★

 1. Check point 신호 발생시.

 2. Dirty Buffer가 임계값 지났을 때.(총 양의 1/3)

 3. Time out 발생시.(3초에 한번)

 4. RAC Ping 발생시.

 5. Tablespace가 read only상태로 변경될 때.

 6. Tablesapce가 offline될 때.

 7. Tablesapce가 begin backup상태가 될 때.

 8. Drop table이나 Truncate table 될 때.

 9. Direct Path Read/Write가 진행될 때.

 10. 일부 Parallel Query 작업이 진행될 때.

 

(2) LGWR(Log Writer) : Redo Log buffer에 기록된 변경내역(Change vector)를 디스크의 Redo log file로 저장해 준다.

 LGWR이 Redo log file에 내려쓰는 경우 

 1. commit 발생시.

 2. 1/3이 찼을 때.

 3. 변경량이 1M가 되었을 때.

 4. 3초마다

 5. DBWR이 내려쓰기 전에. (DBWR이 작동하기 전에 먼저 LGWR이 작동한다.)

** Redo Log buffer에 있는 내용을 Redo Log file에 내려쓰는 이유 : Redo Log buffer도 메모리이므로 서버가 꺼지면 내용이 다 날라갈 수 있으므로.

** Redo Log Ahead method (Write-Ahead) : 데이터가 변경되는 경우 항상 Redo Log buffer에 변경내용을 먼저 기록한 후, database buffer cache에서 내용을 변경하는 특징.

 

 ** commit을 수행하면 DB buffer cache에 있는 데이터를 저장하는 게 아니라, Redo log buffer의 내용을 저장하는 것이다.

 [이유]

 : database buffer cache의 블록은 기본적으로 8KB(10g기준)인데, 변경된 내용이 1글자라 하더라도 저장할 때는 해당 블록을 전부 저장해야 하므로 시간이 많이 소모된다. 그러나 Redo Log buffer의 block크기는 기본적으로 512 bytes로 database buffer cache보다 훨씬 작기 때문에 빨리 저장될 수 있다.

 + 또한, db buffer cache의 블록을 저장할 때는 데이터 파일에서 해당 블록의 원래 위치를 찾아서 덮어써야 하므로 그 시간이 오래걸리지만, redo log file에 내용을 쓸 때는 그냥 순서대로 쭉 써나가기 때문에 빨리 기록될 수 있다.

 

 ** 한꺼번에 많은 사용자가 동시에 commit을 수행하는 경우, LGWR은 그 요청들을 한꺼번에 redo log file에 기록하는 group commit기법을 사용하여 disk I/O도 줄이고 성능도 향상시킨다.

 ** 만약 commit 요청이 들어왔는데 redo log file이 없을 경우 alert log 파일에 해당 에러 내용을 기록해두고 LGWR은 다음 commit요청을 수행하지 않고 대기하게 된다.

 

 

(3) PMON(Process Monitor) (모든 서버 프로세스들의 대장)

 : 모든 서버 프로세스들을 감시하고 비정상적으로 종료된 프로세스가 있다면 관련 복구작업등을 하는 역할을한다. 또한 인스턴스가 시작될 때 해당 인스턴스의 정보를 listener에 등록하고 관리하는 역할도 한다.

ex) 어떤 서버 프로세스가 작업 도중에 비정상적으로 종료되었다면 PMON이 해당 서버 프로세스가 사용하고 있던 Transaction table의 내용을 다시 reset하며 해당 서버 프로세스가 설정해놓은 lock이 있다면 해제하고 비정상 종료된 서버프로세스의 transaction ID를 시스템에서 제거해주는 일을 하게된다.

 

(4) SMON(System Monitor)

 

 SMON의 주요업무 

 

 1. 인스턴스가 비정상 종료되었을 경우(Instance Crash) 인스턴스를 시작할 때 Clean up하는 역할 담당.(Instance Recovery) 

 ★★ Instance Recovery 과정 ★★ 

 1.parameter file을 읽어서 nomount단계에서 instance를 생성.

 2. Mount 단계에서 control file의 내용을 확인해서 instance crash상황임을 확인.

 3. Redo log file에서 비정상 종료되기전에 수행했던 작업전부 다시 수행한다.(commit을 하지 않은 것도 전부!) (Roll Forward)

 4. Database를 open한다.

 5. Commit이 되지 않은 작업을 취소한다.(Roll backward)

→ instance recovery할 때 online redo log file만 읽고 진행된다. 만약 복구해야 할 내용이 archive redo log file에 있다면 instance recovery로는 복구가 안 되며 DBA가 수동으로 media recovery를 수행해야 한다.

 

 2. file에러나 tablespace가 offline상태인 경우등의 사정때문에, Instance recovery 과정에서 누락된 Transaction을 recovery하는 역할.

 3. Transaction이 비정상 종료되면, 사용중이던 Temporary segment를 clean up하는 역할.

 → 누군가가 create index 등의 작업을 하던 도중에 해당 transaction이 비정상 종료된다면 그 세션이 사용중이던 temporary segment를 clean up해준다.

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

 

 

(5) CKPT(Checkpoint Process)

 : 백그라운드 프로세스가 생성한 Checkpoint신호를 DBWR에게 전달해주며, control file과 data file header에 해당 check point 정보를 기록하는 역할.

 ** check point 정보 : check point 위치, scn, redo log내용의 위치값 등

 

2. 선택적인 Background Processes

 

 (1) ARCn (Archiver Processes) 

 : ARCn process는 archive log mode로 데이터베이스를 운영할 경우 online redo log file을 archiving 해주는 역할을 한다.

 → archive log mode가 아닐 경우 작동하지 않는다.

 (2) CJQ0 & Jnnn (job Queue Processes) 

 : 오라클에서 제공하는 Job 기능을 수행하는 프로세스.

 ** oracle job이란 : 어떤 작업을 미리 정해진 시간에 정해진 옵션으로 예약해서 실행하게 해주는 아주 편리한 기능(유닉스의 cron기능과 비슷)

 (3) FBDA (FlashBack Data Archiver Process) 

 : 11g 버전부터 새로 등장한 FBDA기능을 수행해주는 프로세스.

 → Flashback 기능 중에 undo data를 사용하는 기능이 있는데, 이 기능들은 undo data를 다른 프로세스가 덮어 써버릴 경우 flashback을 할 수 없게 되는 단점이 있다.

 → 그런데11g 버전부터 FBDA기능을 사용할 경우 Undo data를 다른 사용자가 덮어쓰기 전에 archive 해서 보관해주는 기능이 도입되었는데, 이 때 undo data를 다른 곳으로 복사해주는 역할을 한다.

 

Print Friendly and PDF Posted by JJ*
: