分散DB・2相コミット・NoSQL・DWH 重要度:★★★出題: AM2・PM1・PM2
2相コミットプロトコル(2PC: Two-Phase Commit)
にそうこみっとぷろとこる / Two-Phase Commit Protocol (2PC)
複数のデータベースやサイトに跨がる分散トランザクションにおいて、調停者(コーディネータ)と参加者(パーティシパント)の間で第1相(コミット準備)と第2相(コミット実行)の2段階で原子性を保証するプロトコル。
3行速習ポイント
- 第1相(投票フェーズ):調停者が「コミット準備指示(Prepare)」を送り、全参加者がログを書き出して「準備完了(Yes)」または「不可(No)」を応答
- 第2相(決定フェーズ):全員が準備完了なら「コミット実行指示」、1つでも不可・タイムアウトがあれば全員へ「ロールバック実行指示」を送信
- 参加者が準備完了を返した直後から第2相の指示を受け取るまでの間は、コミットかロールバックか不確定な「In-doubt(不定)状態」となりロックを解放できない
図解
図2相コミット(2PC)のプロトコルフェーズ
Phase 1
第1相:コミット準備指示 (Prepare)
各参加者がREDO/UNDOログを書き出し準備完了を応答(In-doubtへ遷移)
↕
Decision
調停者のコミット決定ログ書出し
全員Yesならコミット確定(In-commit)、1つでもNoならアボート確定
↕
Phase 2
第2相:コミット/ロールバック実行指示
各参加者がローカルコミット/ロールバックを実行しロックを解放
概要と本質
分散データベース環境でACID特性(特に原子性 Atomicity)を厳密に保証するための標準プロトコルです。午前IIの基礎知識としてはもちろん、午後IIのマイクロサービス・分散決済システム問題(令和7年午後II問1など)でも2PCの動作フローと弱点(ブロッキング問題)が深く問われます。
重要ポイント・コア概念
- In-doubt(不定)状態:参加者がPrepare応答を返した後、調停者や通信経路の障害で第2相の指示が届かないと、参加者は単独でコミットもロールバックもできず行ロックを保持し続ける
- 1つでも参加者が応答しない(タイムアウト)または異常終了した場合、調停者は全参加者に対してロールバック実行指示を出す
- ロック保持時間が通信遅延分だけ長くなるため、高スループットが求められるWeb・決済系ではSagaパターン(補償トランザクション)との比較が論点になる
午後I・午後II記述試験での攻略ポイント
午後試験では「どの時点で障害が起きるとロールバックになるか」「時点A(In-doubt:コミット・ロールバックが不定の状態)と時点B(In-commit:コミットが確定した状態)の違い」「In-doubt状態が長引くことによる業務影響(ロックが解放されず同じ会員がサービスを利用できなくなる等)」が問われます。
午後記述で使える加点キーワード(クリックでコピー)
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着データベーススペシャリスト 過去問演習で実践力を鍛える