1. 체크 포인트란?
버퍼 캐시에서 변경되었으나, 데이터 파일에 적용되지 않은 더티 버퍼를 데이터 파일에 내려쓰고, 이에 대한 정보를 컨트롤 파일과 데이터 파일 헤더에 기록하는 일련의 작업

1.1 목적?
메모리의 데이터를 디스크로 저장하여 인스턴스 비정상 종료 시 복구를 수행하기 위해서

1.2 관리 방법

  • 체크 포인트에 의해 디스크로 기록되는 더티 버퍼는 LRU와 LRUW 리스트에 의해 관리되며 체크포인트 큐 및 파일 큐에 주소값이 링크되어 관리됨.
  • 체크 포인트 발생 시 가장 오래전에 변경된 버퍼 캐시 순으로 정렬되어 DBWR 에 의해 오래된 더티 버퍼부터 순차적으로 디스크에 기록한다.
  • CKPT는 이때 컨트롤파일과 데이터파일 헤더에 체크포인트 관련 정보를 갱신한다.

2. 전체 작업 설명


1) 변경된 4번과 9번 버퍼 캐쉬는 shared pool에 있는 체크 포인트 큐와 파일 큐에 위치 정보가 링크된다.
2) 체크 포인트가 발생하면 DBWR은 체크포인트 큐 및 파일 큐를 확인하여 더티 버퍼인 4번과 9번 버퍼 캐시를 파일에 내려 쓴다.
3) CKPT프로세스는 컨트롤 파일과 데이터 파일 헤더의 체크포인트 정보를 갱신한다.

2.1 워킹 셋

2.1.1 워킹 셋이란?
체크포인트 큐와 파일큐의 묶음으로 버퍼 캐쉬 헤더에서 관리하는 영역으로 하나 이상의 워킹 셋이 오라클에 의해 자동으로 생성되어 관리된다.
워킹 셋은 인스턴스 시작 시 관리해야 할 버퍼 캐시를 Round Robin 방식으로 할당 받는다.
버퍼 캐쉬 해더는 shared pool 영역에 존재한다.

2.1.2 큐별 설명

  • 체크 포인트 큐 : 리두 로그를 생성하며 변경된 더티 버퍼 링크
  • 파일 큐 : 각 파일에 위치한 더티 버퍼 링크
    --> 체크포인트 큐에는 리두 로그 정보가 생성되는 더티 버퍼의 링크만 저장되므로 파일 큐에 링크된 더티 버퍼가 체크포인트 큐에는 링크되지 않는 수가 있다.

2.1.2.1 체크 포인트 큐 종류

  • 스레드 체크포인트 큐 : 더티 버퍼의 주소 값을 저장, 일반적인 체크포인트 큐를 의미함.
  • 복구 체크포인트 큐 : 복구에 사용하는 체크 포인트 큐
    --> 체크포인트 큐 래치에 의해 관리

3. 체크 포인트

3.1 체크 포인트 단계
1) 체크포인트 발생
2) 리두 레코드의 리두 로그 파일 위치 정보인 RBA(Redo Byte Address)를 획득
참고
RBA는 리두 로그 발생 순서대로 저장되므로 리두 로그 생성 시간을 나타냄

3) DBWR이 체크포인트 큐에 링크되어 있는 체크포인트 RBA보다 이전 RBA 값을 가지는 더티 버퍼를 생성된 순서대로 디스크로 내려쓴다.
참고
LRUW의 더티 버퍼는 프리 버퍼 상태로 변경, LRU는 체크 포인트 완료 표시만 한다.

4) 디스크로 내려 쓴 더티 버퍼를 체크 포인트 큐에서 링크를 해제한다.
5) DBWR 작업이 완료되면 CKPT가 컨트롤 파일과 데이터 파일 헤더에 갱신 작업을 한다.

3.2 발생시기
1) 데이터베이스가 정상으로 종료되는 경우
2) 사용자 명령에 의해 발생
3) 테이블스페이스가 오프라인되는 경우
4) 테이블스페이스를 백업하는 경우
5) 로그 스위치가 발생하는 경우
6) 체크포인트 관련 파라미터의 설정 값에 의해 발생
7) 데이터베잉스 복구시 발생

3.3 체크포인트 종류

참고
증분 체크 포인트는 LOG_CHECKPOINT_TIMEOUT, LOG_CHECKPOINT_INTERVAL, FAST_START_IO_TARGET 파라미터 설정을 통해 오라클 8i버전부터 사용되었다. 오라클 9i이후부터 FAST_START_IO_TARGET파라미터 대신, FAST_START_MTTR_TARGET 설정 값에 의해 더티 버퍼를 데이터 파일에 기록한다.
이점은 다음과 같다. --> 적정한 주기로 체크포인트 발생 가능

3.4 체크 포인트 관련 파라미터

  • FAST_START_MTTR_TARGET : 인스턴스 복구 시간을 초 단위로 지정한다.
  • LOG_CHECKPOINT_INTERVAL : 인스턴스 복구에 필요한 리두 로그 블록의 수를 지정
  • LOG_CHECKPOINT_TIMEOUT : 체크포인트 발생 주기를 초 단위로 설정
  • LOG_CHECKPOINTS_TO_ALERT : 체크포인트 발생 시 ALERT LOG 파일에 기록할지 여부 결졍

3.5 체크 포인트 수행 주기와 인스턴스 복구 시간의 관계
3.5.1 체크 포인트 주기가 짧은 경우

  • 롤포워드 시 적용해야 하는 변경 데이터가 적다. --> 인스턴스 복구 시간이 짧다
  • 평소에 IO가 많이 발생하므로 성능에 영향을 줄 수 있다.

3.5.2 체크 포인트 주기가 긴 경우

  • 롤포워드 시 적용해야 하는 변경 데이터가 많다. --> 인스턴스 복구 시간이 길다.
  • 체크 포인트 주기가 짧을 때보다 IO 발생이 적다.