0
0

More than 3 years have passed since last update.

詳細データベース読書メモ -forceとstealとWAL

Posted at

概要

RDBMSのAtomicityとDurabilityを保障するための、ディスクにフラッシュするためのアプローチ。

stealとno-steal

steal

コミットされていないデータでもディスクにフラッシュする。フラッシュしたデータは他のトランザクションがロードできる。
stealを採用する場合、ディスクにフラッシュする前にUNDOログが必須。
ロールバックまたはクラッシュした場合はUNDOログからの復元が必要になる。

no-steal

コミットされていないデータをディスクにフラッシュすることを許容しない。

forceとno-force

force

トランザクションがコミットする時に変更したページがディスクにフラッシュが完了していることを強制する。

no-force

コミット時に変更したページがフラッシュされていなくてもよい。
その代わりコミット時にREDOログを出力を必須とする。
ディスクにフラッシュ前にデータベースがクラッシュした場合、ディスクのデータにREDOログの内容を適用することで復元する。

Write-Ahead Logging (WAL)

トランザクションリカバリ、クラッシュに対応するための補助的な仕組み。
ページの変更をキャッシュにバッファリングしつつACIDを保障するために必要。
(WALがないと常にディスクの読み書きが必要になる)

Atomicityを保証するため、ディスクからページをロードした時は必ずUNDOログを確認する。
ロードしたデータに対応するUNDOログがある場合は、それは他のトランザクションがコミット前のダーティなデータである。
UNDOログを適用することでコミット済みのデータを取得できる。

Durabilityを保証するため、コミット時に全てのREDOログを出力する。
ロードしたデータに対応するREDOログがある場合、コミットがディスクにフラッシュされていないデータをロードしたことになる。
REDOログを適用することでコミットしたデータになる。

組み合わせ

steal/no-force+WALの組み合わせが一般的。
仕組みは複雑(REDO、UNDOが必要)になるが、もっともパフォーマンスが出る。
ARIESというアルゴリズムが今日のトランザクション処理のベースとなっている。

no-steal/forceの組み合わせはパフォーマンスが低いがREDO、UNDOが不要になる。
(たぶん、理論上・・・)

参考

詳細データベースの本以外に以下のスライドが参考になった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0