トランザクション処理と障害回復
要点と定義
トランザクションは、データベースへの一連の処理をひとまとまりとして扱う単位です。ACID特性は、原子性(すべて実行するか、すべて取り消す)、一貫性(定められた整合性を保つ)、独立性(同時実行の影響を適切に制御する)、耐久性(コミットした結果を保持する)です。可用性はこの四特性に含まれません。この問題では、ACIDの四つを知っていることが、該当しない性質を判別する根拠になります。
同時実行制御は、複数の処理が同じデータにアクセスするとき、データの整合性を保つための仕組みです。2相ロック方式では、ロックを取得する成長相から、ロックを解除する縮退相へ進みます。解除を始めた後は新たなロックを取得できません。この順序制約を理解すれば、方式の要件を判断できます。2相ロックは全処理を最初から直列に実行する方式ではなく、デッドロックも起こり得ます。
過去の出題で扱った補足として、並列実行の結果が、ある順序で直列に実行した場合の結果と等価になる性質を直列化可能性といいます。この性質を問う場合は、並列実行の結果と、可能な直列実行の結果との等価性を見ます。ACIDの一貫性や耐久性とは別の概念です。
過去の出題で扱った補足として、隔離性水準を高めると、不整合なデータを読む処理を防ぎやすくなる一方、同時実行の制約などにより、単位時間当たりの処理数が減る傾向があります。この傾向は判断の手掛かりであり、特定のDBMSや設定における実測値を示すものではありません。
障害回復では、ログを使って更新を再適用する処理をロールフォワード、未完了の更新を取り消す処理をロールバックと呼びます。チェックポイント後にコミットした更新は、ログから再適用する対象になり得ます。障害時に未コミットの書込みがあれば、その更新を取り消します。未コミットでも読取りだけでデータを書き換えていない処理には、取り消す更新がありません。コミット状態、チェックポイントとの前後関係、書込みの有無を確認することが、対象を見分ける根拠です。
障害の種類も回復方法を選ぶ手掛かりです。デッドロックで中断されたトランザクションはロールバックします。システム障害ではログに基づいてコミット済みの更新を再適用し、未完了の更新を取り消します。媒体障害ではバックアップを復元してからログの更新を適用します。どの段階の回復かを区別する必要があります。
過去の出題で扱った補足として、REDOのべき等性とは、同じ再適用を繰り返しても、正常終了したときのデータ状態が一度だけ実行した場合と同じになる性質です。これはチェックポイントやバックアップからの復元手順とは異なり、再適用を繰り返した結果に着目した概念です。
適用条件と例
オンライン書店で注文を確定した後にシステムが停止し、再起動後も確定した注文が残っていたとします。コミット後の結果を障害後にも保持する性質が耐久性です。一方、注文処理の一部だけを反映させず全体を実行するか取り消す性質は原子性です。どの時点の結果を問うのかで、対応する特性を区別します。
この節の続き
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む