Berkeley DB
このモジュールは、独立したコンポーネントたちをとりまとめてトランザクショナルなACID特性を提供する
ACID
- 原子性(Atomicity) 一つのトランザクションで実行するすべての操作をひとまとめにして扱う。データベースにすべて反映されるかひとつも反映されないか、そのいずれかしかない。
- 整合性(Consistency) トランザクションの実行前後がそれぞれ論理的に整合性のある状態になっている。
- 独立性(Isolation) トランザクションの観点からはすべてのトランザクションがシーケンシャルに実行される。他のトランザクションと並列で実行されることはない。
- 永続性(Durability) トランザクションをいったんコミットしたらそれはコミットされたままになるという意味である。一度コミットした内容は、どんな障害があっても消えることはない
トランザクションサブシステムは begin commit abortの3つで構成
- トランザクションの開始
- トランザクションの確定
- トランザクションの中止
チェックポイントの処理
- チェックポイントLSNより前のログファイルは消してしまってもかまわない
- リカバリー処理ではチェックポイントLSN移行のレコードだけを処理すればよい
- チェックポイントLSNと実際のチェックポイントレコードの間には多くのログレコードがある可能性がある(それらもリカバリー対象になりうる)
チェックポイントによって、予期しないシャットダウンやクラッシュの後の復旧中に、ログに格納されている変更をSQL Server データベース エンジンが適用するための最適なポイントが作成されます
リカバリー
リカバリーの目標は、ディスク上のデータベースを(おそらく整合性が崩れてしまっている状態から)整合性のある状態に戻す
- 直近のチェックポイントのチェックポイントLSNのひとつ前のチェックポイントを探す
- そこから順方向に読み進め、ログファイルIDのマッピングとコミット済みトランザクションのリストを構築する
- チェックポイントLSNに向かって逆方向に読み進め、コミットしていないトランザクション上の操作をすべてUNDO
- 順方向に読み進め、コミット済みトランザクション上の操作をすべてREDO
- チェックポイントを作る(やってもやんなくてもいい)
2パス方式
直近のチェックポイントLSNに対して、コミットされていないすべてのトランザクションを取り消し(UNDO)、コミットされていたトランザクションをすべて再現する(REDO) ログファイルのIDと実際のデータベースとのマッピングを再構築
設計講座14
データベースのリカバリーは複雑なトピックであり、実装するのも難しいしデバッグも困難だ。というのも、リカバリー処理はそんなに頻繁に発生するものではないからである アーキテクトとして、そしてプログラマーとしての私たちの目標は、さまざまな道具を自由に使いこなすことだ。設計・問題の分割・レビュー・テスト・命名規約やコーディングスタイルなどの道具を使いこなし、プログラミングに関するさまざまな問題を、自分たちで解決可能な問題に落とし込む