トランザクションとACIDを理解する

ACIDの定義を、更新の境界、制約、同時実行、障害復旧へ結び付けます。分離レベルとセーブポイントも学び、条件を読んで実行結果を求めます。

この単元で学ぶこと

  • 業務上の一まとまりからトランザクションの境界を決める
  • COMMITとROLLBACKを区別し、更新後の値を求める
  • ACIDの各性質と守る対象を説明する
  • 同時実行と障害復旧で必要な条件を見分ける

本文解説

業務単位と確定境界 トランザクションは、関連する更新を一つの確定・取消し単位にします。振替の減額と増額、受注行の追加と在庫減算など、片方だけ残せない更新の範囲を決めます。BEGINからCOMMITまでと表す環境がありますが、接続ライブラリが暗黙に開始する場合もあります。自動コミットの設定を含め、実際の確定境界を把握します。

原子性は物理的な同時実行ではない Atomicityは、一式の更新を全部確定するか、全部取り消すかにそろえます。複数の命令がCPUで同じ瞬間に実行されるという意味ではありません。初期x=50を10増やし5減らす処理では、コミット後は55、全体をロールバックした後は50です。いずれも他の更新はないものとします。

一貫性には規則の実装が要る Consistencyは、宣言した整合性条件を満たす状態から、その条件を満たす状態へ更新する性質です。主キーの一意性、外部キー、CHECK制約などが支えます。アプリ側で守る業務条件もあります。正しい振替先かどうかをDBが未指定で推測するわけではなく、トランザクションを使うだけでプログラムの論理誤りがなくなるわけでもありません。

分離性と読取りの異常 Isolationは並行処理の干渉を制御します。別処理の未確定値を読むのがダーティリード、同じ行を再読して他の確定更新による変化を見るのがノンリピータブルリードです。同じ条件の検索で他の確定済み挿入などにより該当行集合が変わるのがファントムリードです。行の値と検索で得る集合を区別して読みます。

分離レベルは保証を読む Read Committedは他の未コミット更新を読まず、同じ行の再読で値が変わることはあります。Serializableは、成功した処理群の結果を何らかの直列実行と等価にします。実現のため競合した処理を中断し、再試行が必要になる場合があります。製品の実装は標準の最低保証より強い場合もあるので、分離レベル名だけで詳細動作を断定しません。

耐久性と復旧情報 Durabilityはコミット結果を後の障害でも保持する性質です。DBMSはログ等を適切に永続化し、復旧の手掛かりにします。一時メモリへ書いただけで成功通知すると、停止時に確定結果を失いかねません。設定や保存装置の前提も重要です。媒体の喪失を含む運用では、バックアップや冗長化、復旧手順も別途検討します。

セーブポイントの計算 SAVEPOINTは処理途中の取消し位置を定めます。x=50から10増やしてsを作り、その後5減らしてROLLBACK TO sとすると、5の減算が取り消されx=60に戻ります。この時点では全体がコミットされたわけではありません。そこでCOMMITなら60を確定し、全体のROLLBACKなら開始時の50へ戻ります。

適用範囲と失敗処理 通常のROLLBACKが対象にするのは、そのDBトランザクションに含まれる未確定更新です。送信済みメールや別サービスの決済まで自動では取り消せません。業務単位の再試行、外部処理の成否確認や補償を検討します。また文エラー時に文だけか全体かのどちらが取り消されるかはDBMSやエラー種別で異なるため、問題の条件と製品仕様を確認します。

図解

更新一式を確定するか取り消すか
外部メールや別サービスの操作は、DBの取消しで自動的には戻らない。

重要ポイント

  • 更新を一体にする範囲と、確定・取消しの境界を先に確認する。
  • ACIDは原子性・一貫性・独立性・耐久性で、守る対象が異なる。
  • 制約、競合制御、障害復旧、外部連携もそれぞれ設計する。

間違えやすい点

  • COMMIT済みの別トランザクションまでROLLBACKで戻ると考えない。
  • 原子性を、すべての命令が物理的に同時実行される意味にしない。
  • 単一DBの取消しで外部メールや決済も自動取消しされると考えない。

用語解説

トランザクション
関連する処理を一つの確定・取消しの単位として扱うもの。
コミット
トランザクションの更新を正常終了として確定する操作。
ロールバック
対象の未確定更新を取り消す操作。通常の全体取消しとセーブポイントへの部分取消しを区別する。
原子性
一式の更新を全部確定するか、全部取り消すかにそろえる性質。
一貫性
定めた整合性条件を満たす状態を処理の前後で維持する性質。
独立性
並行して進むトランザクション間の干渉を制御する性質。分離性ともいう。
耐久性
コミットした結果を後の障害でも保持する性質。永続性ともいう。
セーブポイント
トランザクション途中に置く部分的な取消し位置。作成だけではコミットにならない。
直列化可能性
同時実行の結果が、何らかの順序で一つずつ実行した結果と等価になる性質。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。