Redo commit 여부와 무관

Redo는 장애 직전의 페이지 상태를 먼저 되살리는 단계입니다.

분석 단계가 정한 recLSN부터 로그 끝까지 순방향으로 읽으며, 모든 로그를 다시 훑되 이미 반영된 변경은 pageLSN으로 걸러서 건너뜁니다.

1 시작점
recLSN에서 출발

분석 단계가 찾은 가장 이른 복구 지점부터 다시 읽기 시작합니다. 앞부분 전체를 재탐색하지 않고, 복구에 필요한 구간만 잡아냅니다.

2 Repeating History
로그를 끝까지 순방향으로 재생

커밋 여부를 먼저 가르지 않고, 로그에 적힌 실제 변경 순서를 그대로 따라가며 페이지 상태를 맞춥니다.

recLSN
crash
LSN 120 · update P1 페이지 변경 로그도 다시 검토
LSN 160 · commit T1 커밋 로그도 같은 흐름 위에 존재
LSN 190 · update P2 crash 직전까지 모든 레코드가 대상
3 pageLSN 판정
이미 반영된 변경은 건너뜀

Redo는 무조건 덮어쓰지 않습니다. 각 페이지가 마지막으로 반영한 LSN과 비교해, 아직 안 들어간 변경만 다시 적용합니다.

if (logLSN > pageLSN) redo
logLSN이 더 크다 디스크 페이지에 아직 없는 변경이므로 재적용
logLSN이 작거나 같다 이미 반영된 상태이므로 건너뛰어도 결과가 유지됨
핵심: Redo는 미커밋 로그까지 포함해 장애 직전의 물리 상태를 먼저 복원합니다. 그 뒤에 Undo가 미완료 트랜잭션만 역방향으로 정리합니다.