DBWR
DB Buffer Cache에 저장된 내용을 Datafile에 저장하는 프로세스
DBWR은 기본적으로 한 프로세스만 작동하지만, I/O가 많은 경우 프로세스 수를 늘려 성능 향상 가능
- DB Buffer Cache에서 Datafile로 내려쓰는 경우
- Checkpoint 신호 발생
- Dirty Buffer가 임계값을 지났을 때
- Time Out이 발생했을 때
- RAC Ping이 발생했을 때
- Tablespace가 Read Only 상태로 변경됐을 때
- Tablespace가 Offline될 때
- Tablespace가 Begin Backup 상태로 될 때
- Drop table, Truncate Table 될 때
- DB Buffer Cache의 세 가지 상태
- Free Buffer
덮어써도 상관 없는 경우(사용되지 않았거나 사용되었더라도 변경사항이 저장 된 경우) - Dirty Buffer
변경된 데이터가 저장되지 않아 절대 덮어쓰여서는 안되는 버퍼 - Pinned Buffer
서버 프로세스가 현재 사용중인 블록
위 세 가지 상태를 List를 만들어 다음과 같이 관리한다. - LRU List
- 메인리스트 : 사용된 버퍼들의 리스트, Hot 영역과 Cold 영역
- 보조리스트 : 미사용된 버퍼들이나, DBWR에 의해 기록된 버퍼 리스트
- LRUW List(Dirty List)
- 메인리스트 : 변경된 버퍼들의 리스트
- 보조리스트 : 현재 DBWR에 의해 기록중인 버퍼들의 리스트
- Free Buffer
LGWR
Redo Log Buffer에 있는 내용을 Redo Log File로 저장
- Redo Log Buffer에서 Redo Log File로 내려쓰는 경우
- Commit이 발생했을 때
- 1/3이 찼을 때
- 변경량이 1M가 되었을 때
- 3초마다
- DBWR이 내려쓰기 전에
Commit을 수행하게 되면 데이터를 내려쓴다기 보다는 Redo Log를 저장하는 것
트랜잭션이 발생할 때마다 SCN 숫자를 늘려가며 관리를 하고 이 숫자를 통해 장애 발생시 복구도 가능.
- SCN이 기록되는 곳
- Control File Header
- Checkpoint 발생 시
- Resetlogs 발생 시
*Incomplete Recovery 수행 시
- Data Blocks(Cache Layer)
- Block Clean out 시 마지막 SCN을 각 블록에 기록
- Data Blocks(ITL Entries)
- Data Block의 Transaction Layer 안에 있는 ITL(Interested Transaction List) entries에 Commit된 SCN정보를 기록(Delayed Block clean out)
- Datafile Headers
- 모든 데이터 파일 헤더에 아래의 경우 SCN 기록
- 마지막 Check point 발생 시
- Begin backup 수행 시
- 복구가 되었다면 사용된 마지막 SCN 기록
- 모든 데이터 파일 헤더에 아래의 경우 SCN 기록
- Redo Records / Log Buffer
- Commit이 수행되면 Commit Record에 SCN을 포함하여 저장
- 그 외
- Rollback Segment(Undo Segment)와 Tablespace Header에 기록
- Control File Header
CKPT
DBWR에게 Checkpoint Signal 을 발생
Checkpoint가 발생하게 되면 DB Buffer Cache에서 저장되지 않은 블록을 DBWR이 데이터파일로 저장하고, Redo Log Buffer에서 저장되지 않은 내용을 LGWR가 로그파일로 저장
- Checkpoint가 발생하는 경우
- Log Swith가 발생하는 경우
- DBA가 수동으로 발생시키는 경우(alter system checkpoint)