ネットワーク・データベース・システム基盤 重要度:★★★出題: AM・PM
2相コミットプロトコル
にそうこみっとぷろとこる / Two-Phase Commit Protocol (2PC)
分散データベース環境において、複数のノード間でトランザクションの原子性を保証する調停合意アルゴリズム。
3行速習ポイント
- 調整者(Coordinator)と複数の参加者(Participant)の間で2段階の通信を実施
- 第1相(Prepare相):全参加者にコミット可能か打診。1台でも不能なら全体アボート(ロールバック)
- 第2相(Commit相):全参加者から合意受領後、確定指示(Global Commit)を発行
図解
図2相コミットプロトコル(2PC)による分散トランザクション合意シーケンスプロセス・手順フロー
第1相(Prepare照会とVote応答)➔ 第2相(Global Commit確定またはGlobal Abort取消)▶ 進行順序:1. Phase 1a: 照会➔2. Phase 1b: 投票➔3. Phase 2a: 判定通知➔4. Phase 2b: 完結
11. 第1相:Prepare(コミット準備)要求
Phase 1a: 照会調整者(Coordinator)が全参加者ノードへ更新確定の可否を照会
分散トランザクションの終了にあたり、調整者が関与するすべてのデータベースノード(参加者)に対して「コミット準備ができるか(Prepareメッセージ)」を一斉送信する。
22. 第1相:ログ書出し & Vote(YES/NO)応答
Phase 1b: 投票各参加者がUNDO/REDOログをディスクへ書き出し準備完了を返答
各参加者は整合性チェックとWALログの永続化を行い、確実にコミットできる状態になれば「Prepared(YES)」を、制約違反や障害があれば「Abort(NO)」を調整者へ返送する。
33. 第2相:Global Commit / Abort 指示
Phase 2a: 判定通知全員YESなら確定指示、1台でもNO/無応答なら全体ロールバック指示
調整者は全参加者からYESを受領した場合のみ「Global Commit」を発行し、1台でもNOまたはタイムアウトがあれば全員へ「Global Abort(ロールバック)」を一斉通知する。
44. 第2相:ローカル確定・ロック解放 & ACK完了
Phase 2b: 完結各参加者がコミット(またはロールバック)を実行しACKを返送
各参加者は指示通りにトランザクションを確定(または取消)して保持していた排他ロックを解放し、調整者へ完了応答(ACK)を返して分散トランザクションが完結する。
💡 1台でも参加者が「NO(コミット不可)」を返答するかタイムアウトした場合は、調整者は全参加者へ「Global Abort(ロールバック指示)」を送信して全体の原子性を守る。
概要と本質
ネットワークで分散された複数のサーバーにまたがる更新処理を行う際、一部のサーバーだけ更新されて残りが失敗するとデータが矛盾します。2相コミットは調停者を置き、「準備完了の確認」と「最終コミット指示」を分けることで全ノードの同期状態を一致させます。
重要ポイント・コア概念
- 第1相(投票・準備):調整者 ➔ PREPARE要求 ➔ 参加者がログ書き込み後にYES/NO返答
- 第2相(実行・確定):全員YESならGLOBAL COMMIT、1つでもNOまたはタイムアウトならGLOBAL ABORT
- ブロッキング問題:第1相完了後に調整者がダウンすると参加者が待ち状態になる課題
応用情報(午前択一・午後長文記述)での出題・得点戦略
午前選択式ではシーケンスの流れ(第1相と第2相の役割)が問われる。午後ネットワーク・DB問題では「タイムアウト発生時の挙動」や「ロールバック条件」の記述が頻出。
