Neunomizuの日記

俺だけが俺だけじゃない

# CMU DB 21. Crash Recovery Algorithms

tags: CMU DB

授業

ARIES

Algorithms for Recovery and Isolation Exploiting Semanticsの略称.1990年台初頭にIBMの研究所で開発された.全てのシステムがARIESを原著論文通りに定義はしていないが,十分似ている.

ARIES recovery protolの主要な考えは

  • write ahaed logging
    • DBの変化がディスクに書き込まれる前に安定したストレージに変化のlogが記録される
    • steal + no-force
  • repeating history during redo
    • 再起動の時に,クラッシュの前の作用を再び追い正確な状態にDBを回復する
  • logging changes during undo
    • 繰り返される失敗の出来事において作用が繰り返されないと保証するように記録する作用をundoする記録

WAL records

DBMSのログ記録のフォーマットが追加情報を含むように拡張する必要がある.全てのログ記録は大域的に一意なlog sequence number(LSN)を含む.システムの様々な要素が関連するLSNを追いかける

  • それぞれのページはpageLSNを保持する.
  • システムはflushedLSNを追う.
  • page$i$がディスクに書き込み可能である前に,$pageLSN_{i} \leq flushedLSN$である場所まで少なくともlogを流す必要がある

normal execution

DBMStxnを実行する間に実行時間に取る手順.

  • transaction commit
  • transaction abord
    • CLR...compensation log record

checkpointing

DBMSは定期的にcheckpointを作る.ここでは,buffer pool内のdirty pageをディスクに書き込む.これは回復の直後に再作動させるlogの数を最小化するため.

  • blocking checkpoints
    • DBMSは,DBの一貫したsnapshotをディスクに書き込むことを保証するcheckpointを作る際に,全てを止める.
      • どんな新しいtxnの開始も止める
      • 活動中のtxnが実行をやめるまで待つ
      • dirty pageをディスクに流す
  • slightly better blocking checkpoints
    • 活動中のtxnが実行を終えるまで待たなくてもいい.
    • checkpoint現在の内部システムの状態を記録する必要がある.
      • どんな新しいtxnの開始も止める
      • DBMSがcheckpointを作っている間のtxnを停止する
  • active transaction table(ATT)
    • DBMSで活動中のtxnの状態を表す.
    • 以下の情報を保持している
      • transactionId
        • 一意なtxnの識別子
      • status
        • 現在のtxnの状態(running, committing, undo candidate)
      • lastLSN
  • dirty page table(DPT)
    • 未完了のトランザクションによって変更されたbuffer pool内のページについての情報を持っている.
  • fuzzy checkpoints

ARIES recovery

ARIESプロトコルは3段階から成る.

  • analysis phase
    • DBのMasterRecord LSNを経由して見つかった最後のcheckpointから始まる
      • checkpointから先のlogをスキャンする
      • TXN-END recordを見つけたら,ATT(active transaction table)からから取り除く
      • 全ての他のrecordに関しては,トランザクションUNDO状態でATTに加え,完了したらすぐにトランザクションの状態をCOMMITにする
      • UPDATE log recordsに関しては,もし,ページ$P$がDPT(dirty page table)内になければ,$P$をDPTに加え,$P$の recLSNをlog recordのLSNに変える
  • redo phase
    • 目的はクラッシュした際の状態に再構築するために歴史を繰り返すこと.全ての更新を再び適用し,CLRを再びする.
  • undo phase

感想

クラッシュすると大変なのでクラッシュさせたくないですね…