log-based recovery 원칙
- write(X) 전에 반드시 log record <Ti, X, V1, V2>를 log buffer에 기록
- output(Bx) 전에 반드시 연관된 log record <Ti, X, V1, V2>를 log buffer에서 stable storage로 이동
- log buffer에 저장된 어떤 log record가 stable storage로 이동할 때는 반드시 해당 log record 이전에 기록된 모든 log record까지 함께 이동
- log record <Ti commit>, <Ti abort>이 log buffer에 기록되는 순간 log buffer의 모든 log record를 stable storage로 이동 (log buffer flush by log force operation)
- Ti is end ⇔ stable storage의 log record에 <Ti commit(abort)> 존재
Log buffer output Policy
- log buffer의 block이 full이면 block에 저장되어 있던 log record를 stable storage로 이동
- log force 연산이 실행되면 log buffer의 log record를 stable storage로 이동
- log record <Ti commit>, <Ti abort>이 log buffer에 기록되는 순간 (log buffer flush)
- DB buffer manager의 steal policy에 의해 실행 중인 transaction이 작업 중인 dirty block이 output될 때
- checkpoint maneger가 checkpoint 작업을 진행할 때
DB buffer output Policy
- no-force policy
- steal policy
Storage Access (No Recovery Mechanism)
read(x1, X)
- T1이 DB buffer manager에게 DB data X를 요청.
- 만약 X가 저장된 block Bx가 buffer에 없으면 input(Bx) 연산 실행
- DB buffer manager가 T1에게 input 연산 완료 알림
- T1은 DB buffer의 X를 읽어서 T1의 지역변수 x1에 저장
write(x1, X)
- T1이 DB buffer manager에게 DB data X를 요청.
- 만약 X가 저장된 block Bx가 buffer에 없으면 input(Bx) 연산 실행
- DB buffer manager가 T1에게 input 연산 완료 알림
- T1의 지역변수 x1의 값을 DB buffer의 X에 저장
- DB buffer manager의 알고리즘에 의해 임의의 시점에 output(Bx) 연산 실행되어 stable storage에 X값 저장