본문 바로가기

ORACLE/아키텍처 기초

오라클 아키텍쳐 (5) Checkpoint

728x90
반응형

Checkpoint


버퍼 캐시상에서 변경된 블록을 데이터 파일에 기록하는 시점을 Checkpoint라고 한다.

변경사항을 디스크에 바로 기록하지 않고 버퍼 캐시에 기록 후 Checkpoint 마다 디스크에 기록하는 방식으로 디스크 I/O를 최소화하고 성능을 높인다.

 

프로세스

  1. 체크포인트가 발생
  2. CKPT에서 DBWn에 체크포인트가 발생한 것을 통지
  3. 통지받은 DBWn은 버퍼 캐시에 변경된 블록을 데이터 파일에 기록
  4. LGWR 또는 CKPT(버전에 따라 상이)이 현재 발생한 checkpoint의 SCN 값을 data file과 control file에 기록

 

Check Point 발생 경우

  • Log switch가 발생한 경우
  • Log_checkpoint_interval 파라미터 만큼의 OS block 간격 (단위는 OS block. 이 크키만큼 redo log file에 기록 후 check point가 발생.)
  • Log_checkpoint_timeout 파라미터 만큼의 초 간격
  • Alter system checkpoint 명령문 수행 시

 

주의사항

Checkpoint 수행 중에 새 Checkpoint 발생하면 이전 Checkpoint는 새 Checkpoint의 수행이 끝날 때 까지 같이 ACTIVE 상태임. 이로 인해 Checkpoint not complet이 발생할 수 있다.

Checkpoint not complete

Active 상태인 Redo Log File 에 대한 Checkpoint가 발생하여 디스크로 쓰는 작업이 완전히 끝나야 Redo Log File이 Inactive 상태로 변경되어 재사용이 가능한 상태가 된다.

어떤 redo log file에 대한 Checkpoint 가 끝나지 않은 상태에서 새로운 Checkpoint가 발생하면 새로운 Checkpoint가 완료될 때 까지 같이 Active 상태로 유지되게 된다. 

이때 Log Switch가 발생해 로그 순환으로 Inactive 상태의 Redo Log File를 재사용하려고 하는데 Checkpoint가 오랫동안 끝나지 않아 모든 Redo Log File 이 Active 상태인 경우, 더이상 Log 기록이 불가능해 Checkpoint not complete 에러가 발생한다.

 

이때 Checkpoint 수행 중인 datafile header는 다른 작업이 blocking 된다.

 

> 적절한 checkpoint 간격 설정과 적절한 redo log file의 개수, 크기 중요

 

728x90
반응형