Oracle LGWR
flush 조건은 여러 개지만 결과는 하나입니다. 로그가 데이터 페이지보다 먼저 디스크에 있어야 COMMIT과 DBWR이 안전하게 진행됩니다.
메모리 시작점
로그 버퍼
트랜잭션의 redo가 먼저 쌓이는 장소입니다. 아직 디스크 영속화는 끝나지 않았습니다.
→
flush 담당
LGWR
트리거가 생기면 버퍼의 redo를 순차적으로 디스크 로그에 기록합니다.
→
디스크 기준점
Redo Log 파일
장애 복구와 내구성 판단의 기준입니다. 이후 DBWR이 데이터 페이지를 써도 일관성을 지킬 수 있습니다.
즉시 flush가 강제되는 순간
WAL 규칙 때문에 기다릴 수 없는 시점입니다. 데이터보다 로그가 먼저 디스크에 있어야 합니다.
WAL 2
COMMIT 할 때
성공 응답을 주기 전에 commit redo를 먼저 기록해, 커밋 완료가 디스크 기준으로 확정되게 합니다.
WAL 1
DBWR이 Dirty 페이지를 쓰기 직전
데이터 페이지가 먼저 나가 버리면 복구 근거가 사라지므로, 관련 redo를 선행 기록합니다.
주기적으로 버퍼를 비우는 순간
안전성만이 아니라 운영 효율도 함께 고려합니다. 너무 오래 메모리에만 두지 않도록 정리합니다.
용량
로그 버퍼가 1/3 이상 찼을 때
redo가 몰릴 때 한 번에 밀어내어 버퍼 압박을 줄이고 다음 기록을 받을 여유를 만듭니다.
주기
약 3초마다
버퍼가 덜 차도 일정 시간마다 flush해, 메모리에만 머무는 로그 시간을 너무 길게 끌지 않습니다.
학습 포인트
이 그림에서 기억할 것은 네 가지 조건의 암기보다 공통 경계입니다. LGWR flush가 먼저 끝나야 COMMIT 내구성과 DBWR의 데이터 쓰기가 둘 다 안전해집니다.