CHECKPOINT 문

CHECKPOINT 문

CHECKPOINT 문은 재작성 로그(WAL)의 데이터를 데이터베이스 데이터 파일에 동기화해요.

출처: 문서

본문

CHECKPOINT 문은 재작성 로그(WAL)의 데이터를 데이터베이스 데이터 파일에 동기화해요.

예제

기본 데이터베이스의 데이터 동기화:

CHECKPOINT;

지정한 데이터베이스의 데이터 동기화:

CHECKPOINT file_db;

데이터를 동기화하고 새 트랜잭션을 방지:

FORCE CHECKPOINT;

이전 DuckDB 버전에서는 FORCE CHECKPOINT가 진행 중인 트랜잭션을 중단했어요. v1.4부터는 체크포인트 잠금을 얻을 수 있을 때까지 기다려요.

메모리 내 테이블 체크포인팅

v1.4.0부터 메모리 내 테이블이 체크포인팅을 지원해요. 이는 두 가지 주요 이점이 있어요.

  • 메모리 내 테이블도 압축을 지원해요. 기본적으로 비활성화되어 있으며 다음과 같이 켤 수 있어요.

    ATTACH ':memory:' AS memory_compressed (COMPRESS);
    USE memory_compressed;
    
  • 체크포인팅은 삭제된 행의 진공(vacuuming)을 트리거해, 삭제/잘림 후 공간을 회수할 수 있게 해요.

문법

체크포인트 작업은 WAL 크기에 따라 자동으로 발생해요 (참고: 구성). 이 문은 수동 체크포인트 작업을 위한 것이에요.

동작

기본 CHECKPOINT 명령은 실행 중인 트랜잭션이 있으면 실패해요. FORCE를 포함하면 체크포인트 잠금을 얻을 수 있을 때까지 기다린 다음 체크포인트 작업을 실행해요. v1.4 이전의 DuckDB 버전에서 FORCE CHECKPOINT는 대신 진행 중인 트랜잭션을 중단했어요.

추가 동작 수정을 위해 관련된 PRAGMA 옵션도 참고해요.

공간 회수

체크포인트를 수행(자동이든 아니든)할 때 삭제된 행이 차지하는 공간은 부분적으로 회수돼요. 이는 모든 삭제된 행을 제거하는 것이 아니라, 상당한 양의 삭제가 있는 행 그룹을 함께 병합해요. 현재 구현에서는 인접한 행 그룹에서 ~25%의 행이 삭제되어야 해요.

v1.4.0부터 체크포인팅은 메모리 내 데이터베이스에도 적용되며(메모리 내 테이블 체크포인팅 참고), 마찬가지로 삭제된 행을 진공 처리하고 공간을 회수해요.

경고 VACUUM은 삭제 진공을 트리거하지 않으므로 공간을 회수하지 않아요.

더 알아보기 (Learn more)

  • PRAGMA 옵션에서 체크포인트 관련 설정을 확인해요.