(Redo Log 라는 단어를 난생 처음 들어보았다. 기념할 겸 책에서 찾아본 내용을 기록한다)
4.2.11 리두 로그 및 로그 버퍼 (p.130) 중
트랜잭션 4 요소인 ACID 중, D(Durable)에 해당하는 '영속성'과 밀접하게 연관. mysql 서버가 비정상 종료했을 시, 데이터 파일에 기록되지 못한 데이터를 잃지 않게 해주는 안전장치이다.
데이터 변경 요청은 '로그로 먼저' 기록한다.
데이터 파일 쓰기는 디스크의 랜덤 엑세스가 필요하므로 변경된 데이터를 테이터 파일에 기록하려면 큰 비용이 필요하다. 이로 인한 성능 저하를 막기 위해 데이터베이스 서버는 쓰기 비용이 낮은 자료구조를 가진 리두 로그를 가지고 있으며, 비정상 종료 발생 후 리두 로그의 내용을 이용해 데이터 파일을 다시 서버가 종료되기 적전으로 복구한다.
ACID 못지 않게 성능도 중요하므로, 리두 로그를 버퍼링하는 InnoDB 버퍼 풀 또는 로그 버퍼와 같은 자료구조도 존재한다.
mysql 서버 비정상 종료시 InnoDB 스토리지 엔진의 데이터 파일은 두 종류의 일관되지 않은 데이터를 가질 수 있다.
1. 커밋됐지만 데이터파일에 기록되지 않음
2. 록백됐지만 데이터 파일에 이미 기록됨
1번의 경우 리두 로그로 해결가능하다.
2번의 경우, 변경되기 전 데이터를 가진 '언두 로그(undo log)'의 내용이 필요하다. 그렇다고 해도 최소한 변경이 커밋됐는지, 롤백됐는지, 어쨌는지 알려면 리두 로그가 필요한건 마찬가지.