Search

Crash Recovery

Undo logging

Rule1: <T,A,8>은 disk에 쓰여지기 전에 써진다.
Rule2: Commit T는 A,B가 디스크에 써지고 남겨진다.

Recovery

그냥 commit의 여부를 보고 이전 값으로 되돌리면 된다.
Undo-log recovery is ideempotent. recovery 하다가 죽어도 회복 가능

Checkpointing

새로운 트랜잭션 유입을 중단닛키고 커밋 다되면 체크포인트 했다가 다시 풀고
이러면 체크포인트 위쪽을 안 봐도 됨

Nonquiescent checkpointing

체크포인팅하는 동안 transaction을 안 막고 싶다.
현재 활동 중인 모든 트랜잭션을 checkpoint하되 새로 들어오는걸 막지는 않는다.
END CKPT는 활동중인 트랜잭션이 모두 Commit 되면 함.
end checkpoint가 나오면 그 중간에 나오는 commit은 다 작업 완료된 애들임.
따라서 중간에 나오는 커밋을 제외한 나머지 친구들만 돌리면 되고, start ckpt 까지만 보면 됨

Redo logging

Undo logging은 많은 disk I/O를 사용한다. 왜냐하면 디스크에 다 쓰지 않으면 커밋 트랜잭션을 할 수가 없으니.
Redo는 메모리에 있는 값으로 DB값을 바꾸는 것
완벽하지 않은 트랜잭션을 무시하고, 다 된애들꺼만 다시 돌리는 방식
<T,X,v>는 T가 X에 대해 v를 썼다는 말
Rule1: 모든 레코드는 Disk의 값이 수정되기 전에 디스크에 무조건 나타나야한다.

Nonquiescent checkpointing

START CKPT → 이 이전에 commit된 트랜잭션들은 모두 DB에 쓴다.
이렇게 쓰는 동작들이 모두 다 되고 나면 END CKPT를 함
END CKPT가 없다면 disk에 어떻게 써졌는지 알 수 없다. 따라서 해당 체크포인트를 무시하고 그냥 처음부터 다 봐야한다.

Undo/Redo logging

좀 더 유연한 로깅임
<T,X,v,w>: 는 T가 X의 값을 v에서 w로 바꿨다.
rule: <T,X,v,w>는 디스크의 x값을 바꾸기 전에 나타나야한다.
commit에 관해서는 rule이 없다.

Nonquiescent checkpoint

그냥 모든 dirty 값들을 disk에 씀
다 끝나면 END CKPT함.