WAL 커밋 경계

커밋 직전에는 Redo 로그만 먼저 디스크에 씁니다

변경된 데이터 페이지는 여기저기 흩어져 있지만, 로그는 파일 끝에 이어 붙습니다. 그래서 커밋 경로를 로그 flush 중심으로 만들면 지속성을 지키면서도 더 빠르게 끝낼 수 있습니다.

버퍼의 변경 페이지 A, B, C가 메모리에서 먼저 수정됩니다.
Redo 로그 flush 커밋 전에 변경 내역을 로그 파일 끝에 순서대로 기록합니다.
COMMIT 완료 장애가 나도 로그를 다시 적용해 복구할 수 있습니다.

데이터 페이지 전체 쓰기는 이 시점에 끝낼 필요가 없고, 이후 체크포인트가 디스크 반영을 정리합니다.

비교 기준
데이터 파일 쓰기
Redo 로그 쓰기
기록 위치
변경 페이지가 여러 위치에 흩어짐

커밋 시 필요한 페이지를 찾아가며 써야 해서 랜덤 I/O가 됩니다.

A, B, C 페이지를 각각 다른 자리에서 찾아 써야 함
로그 파일 끝에 연속으로 추가

같은 변경이라도 로그는 한 줄로 이어 붙으므로 순차 I/O가 됩니다.

현재 끝 위치에 다음 로그 레코드를 계속 덧붙임
디스크 움직임
헤드가 여러 번 점프

쓰기 자체보다도 위치를 바꾸는 탐색 비용이 반복됩니다.

한 방향으로 밀어 쓰기

헤드 이동이 거의 없어 커밋 경로가 짧고 단순합니다.

커밋 순간 의미
지금 바로 다 쓰면 느림

데이터 파일을 커밋 경로에 넣으면 랜덤 I/O 부담이 바로 발생합니다.

로그만 flush해도 지속성 확보

장애 시 Redo 로그를 재적용할 수 있으므로 커밋을 빠르게 끝낼 수 있습니다.

핵심: WAL은 랜덤하게 흩어진 데이터 페이지 쓰기를 커밋 경로에서 빼고, 순차적으로 추가되는 Redo 로그 flush만 먼저 수행하게 만들어 커밋 지연을 줄입니다.