WAL 커밋 포인트
사용자가 COMMIT을 입력해도, 로그가 디스크에 남기 전까지는 아직 부분 커밋입니다.
중요한 경계는 명령 수신이 아니라 Redo 로그 flush 성공입니다. 그 순간부터만 장애 후에도 변경 내용을 다시 재현할 수 있습니다.
공유 출발점
마지막 SQL은 끝났지만 변경은 아직 메모리에 있습니다
버퍼에 있는 변경 내용은 장애가 나면 사라질 수 있으므로, 아직 확정된 결과가 아닙니다.
더티 페이지
Redo 로그 버퍼
→
부분 커밋
COMMIT을 받았지만 Redo 로그는 아직 디스크에 없습니다
이 구간이 과도기 상태입니다. 성공과 실패는 모두 여기서 갈립니다.
커밋 포인트
Redo 로그가 로그 파일에 flush된 순간에만 커밋이 성립합니다. 그 전에는 여전히 실패 후 ROLLBACK 경로가 열려 있습니다.
Redo flush 성공
커밋 완료
이제 DBMS는 성공 응답을 보내도 됩니다. 장애가 나더라도 로그를 읽어 변경을 다시 적용할 수 있습니다.
내구성
로그가 디스크에 있으므로 재시작 후 Redo로 복구 가능합니다.
데이터 파일
데이터 페이지 기록은 나중이어도 됩니다. WAL이 먼저 안전망을 만들어 두었기 때문입니다.
로그 기록 중 장애
실패 → 롤백
커밋 포인트에 도달하지 못했으므로 트랜잭션은 확정되지 않습니다. 남은 경로는 실패 처리와 변경 취소입니다.
의미
사용자가 COMMIT을 호출했더라도, 디스크에 남은 로그가 없으면 아직 성공으로 볼 수 없습니다.
결과
DBMS는 ROLLBACK으로 메모리 변경을 되돌려 일관성을 지킵니다.
핵심: WAL의 순서는 로그 먼저, 데이터는 나중입니다. 그래서 Redo 로그 flush 완료가 진짜 커밋 경계가 되고, 데이터 페이지 쓰기는 그 뒤여도 괜찮습니다.