[CMPT 454] Week11_2

June·2021년 3월 30일
0

CMPT 454

목록 보기
29/33
post-custom-banner

What can happen

system crash는 memory는 날라가고 disk는 괜찮은 상황을 말한다.

Motivation

Crash Recovery: Big Picture

ANALYSIS Phase

Example of ANALYSIS Phase

오른쪽 젤 위 테이블이 checkpoint에 저장되어있는 테이블이고 중간 테이블은 crash 당시 테이블이고 맨 밑은 After analysis 테이블이다. analysis는 checkpoint부터 (저장되어있던 테이블)이어서 했다. 가장 오래된 LSN인 100부터 redo 시작한다.

120까지 봤을 때 100만 disk에 쓰지 않았으므로 dirty table에 남아있다.

그다음 140이 disk에 write하므로 dirty table은 비워져야한다.

steal은 log에 안남는다.

160 end는 T1이 dirty page table에서 지워지는 것을 말한다.

170에서 P2가 update인데 맨위에 테이블에 없는 것을 보고 맨 밑에 테이블에 적는다.

REDO Phase

다른 것은 이미 다 disk에 write돼서 실제로 redo 되는 것은 170이다.

Redoing "LSN: T update P" is not necessary:

pageLSN은 page를 바꿀때마다 pageLSN에 기록하는 것이다. 가장 최근의 update를 기록한다.

100은 140보다 오래된 것이니 redo할 필요 없다. 조건 1은 만족하나 조건 3에서 만족 못한 것이다. 조건 2도 당연히 못하고. 괄호안의 숫자는 어느 조건에 걸리나이다.

110은 2에 걸린다.

115는 1에 걸린다.

140은 3에 걸린다. 이미 disk에 write 했다.

170은 모든 조건을 만족하므로 redo한다.

redo 뒤에는 모든 것은 정상적으로 disk에 write된다.

Note: redo will change pageLSN:

UNDO Phase

U는 everything except commited.

Example: WAL

T2만 commit되어있다. 따라서 120과 160은 should not happen. 따라서 A=0, B=0, C=2가 correct state이다.

redo다음 undo를 한다. 여기서 T2는 commit했으므로 건드리지 않는다.
여기서 loser는 T1(130)이고 T3(160)이다. 따라서 ToUndo = {160, 130}이다. 알고리즘을 따라 먼저 undo 160을하고 (c가 2가 된다). 160을 ToUndo에서 제거해서 {130}만 남는다 (160의 이전 T3에 대한 LSN이 있으면 추가하는데 없다). 130을 undo해서 (b가 0이된다). 그 다음 ToUndo는 replace해서 120이 된다. 그런식으로 반복한다.

post-custom-banner

0개의 댓글