← 질문 목록
#315깊이 0
갑자기 꺼져도 커밋한 것이 남는 이유는?
데이터를 고치기 전에 무엇을 고칠지부터 로그에 적고 그 로그를 먼저 디스크에 내리기 때문이다.
| 순서 | 로그 | 데이터 |
|---|---|---|
| 1 | 바꿀 내용을 적는다 | 메모리에서 고친다 |
| 2 | 디스크에 내린다 | 아무것도 하지 않습니다 |
| 3 | 아무것도 하지 않습니다 | 나중에 내려간다 |
| 4 | 재시작 때 다시 읽는다 | 로그대로 맞춘다 |
커밋이 끝났다고 답하는 시점은 데이터 페이지가 아니라 로그가 디스크에 닿은 시점이다. 데이터는 아직 메모리에만 있어도 된다.
이렇게 하는 이유는 속도다. 여기저기 흩어진 페이지를 매번 내리면 디스크 헤드가 뛰어다닌다. 로그는 뒤에 이어 붙이기만 하므로 한 줄로 쓴다.
재시작하면 로그를 읽어 커밋된 것을 다시 적용한다. 커밋 안 된 것을 어떻게 치울지는 구현마다 다르다. 되돌리는 쪽도 있고 그냥 안 보이게 두는 쪽도 있다.
체크포인트는 그 시작점을 앞으로 당긴다. 없으면 처음부터 다 읽어야 해서 복구가 길어진다.