공유 전제
메모리에는 이미 바뀐 페이지가 있지만, 디스크에는 아직 예전 값일 수 있습니다.

WAL 덕분에 로그는 먼저 안전하게 디스크에 기록됩니다. 이제 남은 판단은 하나입니다. Dirty Page를 언제 디스크로 내려보낼지를 두 상황에서 따로 정합니다.

1. 커밋 시점 판단 Force vs No-Force
커밋 응답을 주기 전에 데이터 페이지도 꼭 디스크에 써야 할까?

로그는 이미 flush 되었으므로, 데이터 페이지 기록을 지금 할지 미룰지가 선택 포인트입니다.

대안
Force

커밋과 함께 데이터 페이지까지 즉시 기록합니다. 복구는 단순하지만 랜덤 I/O 부담이 큽니다.

→
실무 선택
No-Force

커밋 시에는 로그만 보장하고 데이터 페이지 기록은 나중으로 미룹니다. 성능을 위해 대부분 이 방식을 택합니다.

디스크에 남는 상태

커밋은 끝났지만 데이터 페이지는 아직 옛값일 수 있습니다.

필요한 복구

Redo: 빠진 커밋 결과를 로그로 다시 적용합니다.

2. 버퍼 회수 시점 판단 No-Steal vs Steal
트랜잭션이 아직 끝나지 않았는데도, 메모리 압박 때문에 페이지를 먼저 내보내도 될까?

버퍼를 비워야 할 때 미커밋 페이지를 디스크로 보낼지 여부가 선택 포인트입니다.

대안
No-Steal

커밋 전에는 디스크로 내리지 않습니다. Undo 부담은 줄지만 버퍼를 오래 붙잡게 됩니다.

→
실무 선택
Steal

버퍼가 필요하면 커밋 전 페이지도 먼저 기록합니다. 메모리 관리는 유연해지지만 미커밋 흔적이 남을 수 있습니다.

디스크에 남는 상태

아직 커밋되지 않은 변경이 이미 디스크에 기록될 수 있습니다.

필요한 복구

Undo: 남아 버린 미커밋 결과를 로그로 되돌립니다.

실제 조합은 보통 No-Force + Steal입니다. 그래서 장애 직후 디스크에는 아직 반영되지 않은 커밋 결과와 이미 써 버린 미커밋 결과가 함께 존재할 수 있고, 복구는 자연스럽게 Redo + Undo를 모두 필요로 합니다.