[CMPT 454] Week10_3

June·2021년 3월 21일
0

CMPT 454

목록 보기
27/33

Observation 2: Support REDO/UNDO

Write-Ahead Logging (WAL)

Example: WAL

  • T1 update A는 메모리에만 일어나고, disk에는 바뀌지 않으므로 dirty page다.
  • T2 update C도 마찬가지다.
  • T1 update A (steal)은 write to the disk이다. steal은 steal from memory page A and therefore you have to write the dirty page to the disk? "flush log records to log before writing dirty pages to disk". T1 update A (steal)하면 오른쪽에 세번째가 메모리에 생긴다. 그러면 위의 세개 log records를 flush한다. 그 다음 dirty page를 disk에 쓸 수 있다(2).
  • 여섯 번째에서 commit 하기전에 파란색 3개 log records를 flush한다. log를 함으로서 redo 할 수 있게 durable한 것이다
  • T3 update C(steal)은 disk에 write 한다.

왼쪽은 메모리에서 일어나는거라 생각하면된다.

correct한 것은 commit한 것만 생각한 것이다. crash할 때 값이랑 correct 값이랑 다르다.

commit은 특정 Transaction만 commit하지만, log flush는 이전에 쌓인거 다한다.

commit할 때 disk에 write할 필요는 없다. 다만 log를 남기는 것이다.
steal은 log도 남기도, value도 disk에 write하는 것이다.

WAL & the Log

Log Records

Other Log-Related State

After crash, undo all uncommited transactions and redo all commited transactions.

즉 Transaction Table은 crash할 때 무슨 transaction이 alive 상태였는지 알려준다. undo 하기 위함이다.

Dirty Page Table은 diry page를 알아내서 redo 하기 위함이다.

100 T1 update A

TT에서 status U는 uncommited이다.

110 T1 update A

120 T2 update

125 T1 update A (steal)

130 T1 update A

다시 A가 DPT에 생겼다.

140 T1 commit

150 T1 End

A를 TT에서 제거하는 이유는 active 한 것만 보관하기 때문이다

pageLSN은 disk에 값을 바꿀때 (steal) lsn인 것 같다.

0개의 댓글