WAL과 지속성
커밋은
데이터 파일이 아니라 로그 flush 완료
시점에 안전해진다
버퍼 캐시의 변경은 휘발성이지만, Redo 로그를 먼저 디스크에 고정하면 장애 후에도 커밋된 변경을 다시 적용할 수 있습니다.
시간 축
1. 변경 시작
트랜잭션이 페이지를 수정
2. 로그 먼저 기록
무엇이 바뀌었는지 남김
3. 로그 flush
이후 COMMIT 인정
4. 데이터 파일 반영
나중에 써도 됨
Buffer Cache
메모리
데이터 페이지가 수정됨
dirty page 상태라 아직 영구 저장이 아닙니다.
Redo Log
디스크 로그
변경 내역 기록
WAL: 데이터보다 로그가 먼저
flush 완료
커밋된 변경을 복구할 근거가 생김
Data File
디스크 데이터
나중에 반영
checkpoint 또는 redo 시점에 최신화
지속성 확보 지점:
로그가 디스크에 flush된 뒤라면, 그 직후 장애가 나도 커밋된 변경은 Redo로 다시 살릴 수 있습니다.
장애 후 복구
사라지는 것
메모리의 dirty page는 소실됩니다.
남는 것
flush된 Redo 로그는 디스크에 그대로 남습니다.
결과
재시작 시 로그를 읽어 커밋된 변경을 데이터 파일에 재적용하므로 지속성이 보장됩니다.