CMU 15-445 Logging Protocols + Schemes

  • バッファプールの書き出しは2つのポリシーに分解できる
    • Steal はコミット前のデータを書き出すか
    • Force はコミット時にダーティなデータを書き出すか
  • Shadow paging
    • master copy と shadow copy を作って、書き込みを shadow に行い、commit 時にスワップする
    • no-steal + force なアルゴリズム
    • リカバリ時には shadow を破棄する
    • ランダムライトになるし GC が必要なので使っている DB はほとんどいない
    • また no-steal なのでメモリより大きなデータが扱えない
  • Write-Ahead Log
    • 書き込みをログする
    • steal + no-force なアルゴリズム
    • トランザクション開始時に begin ログを、終了時に commit ログを書き込む
    • トランザクションコミット時にログを fsync する
    • 複数のトランザクションを fsync を一発にする group commit を行えばコストを下げられる
    • ログの方法は3種類
      • physical logging は更新行の情報を書き込む
      • logical logging はクエリーを書き込む
      • physiological logging はページ内の論理更新を書き込む
      • physical は更新量が多いとログが多くなり、logical は undo がむずい。
    • checkpoint
      • ログの適用をどこからするべきかわからない
      • ダーティページを書き出した直後に checkpoint ログを書き込むことで、以後のログだけ undo/redo すれば良い