Fuzzy Checkpoint 체크포인트 순간에 모든 Dirty 페이지가 한꺼번에 디스크로 내려가지는 않습니다.

그래서 DBMS는 "지금 전부 기록"이 아니라, Dirty 페이지를 얼마나 자주 얼마나 부드럽게 배출할지 계속 조정합니다.

읽을 포인트 설정 이름은 달라도, 운영자가 조절하는 것은 같은 축입니다.

트리거 조건, flush 속도, 백그라운드 기록 담당자를 맞춰서 평상시 I/O 부담과 장애 후 Redo 범위를 함께 관리합니다.

PostgreSQL

시간, WAL 크기, 분산 비율로 체크포인트 강도를 조절합니다.

시간 + WAL
Trigger and pacing
checkpoint_timeout 5min
max_wal_size 1GB
checkpoint_completion_target 0.9
Background work
Checkpointer

체크포인트를 시작하고 기준 시점을 만듭니다.

Background Writer

Dirty 페이지를 나눠 써서 쓰기 버스트를 완화합니다.

Manual checkpoint CHECKPOINT;
공통 운영 원리 체크포인트 설정은 결국 Dirty 페이지 배출 속도 조절기입니다.

DBMS마다 이름은 달라도, 복구 시작점과 정상 운영 중 I/O 압력을 같은 축에서 다룹니다.

체크포인트를 더 자주 혹은 더 강하게 만들수록

장애 후 다시 읽어야 할 로그 구간은 짧아지지만, 평상시에는 디스크 쓰기 부담이 더 자주 나타납니다.

1. 언제 밀어낼지 정함

시간 경과, WAL 증가, Dirty 비율 같은 조건이 체크포인트 시작 압력을 만듭니다.

2. 얼마나 부드럽게 쓸지 정함

분산 기록과 I/O 용량 제어로 특정 순간의 쓰기 스파이크를 줄입니다.

결과

복구는 빨라지고, 정상 처리량 저하는 과도하지 않게 유지하는 방향으로 균형을 맞춥니다.

MySQL InnoDB

Dirty 페이지 비율과 I/O 용량에 맞춰 flush 강도를 조절합니다.

Dirty 비율 + I/O
Flush control
innodb_max_dirty_pages_pct 75
innodb_io_capacity 200
innodb_adaptive_flushing ON
Background work
Page Cleaner Thread

Dirty 페이지 비율과 redo 압력을 보며 디스크 기록 속도를 조정합니다.

읽는 방법

PostgreSQL이 "체크포인트 시점"을 더 직접 다룬다면, InnoDB는 flush 압력을 연속적으로 다루는 쪽에 가깝습니다.