2相コミットにおける障害発生|科目A-1(応用情報技術者) 令和6年 秋期午前試験 問27
出典:令和6年秋期 午前 問27
分野:データベース / トランザクション処理
2相コミットで分散トランザクションの原子性を保証する場合,ネットワーク障害の発生によって参加者のトランザクションが,コミットすべきかロールバックすべきかを判断できなくなることがある。このような状況を発生させるネットワーク障害に関する説明として,適切なものはどれか。
- ア:調停者のトランザクションが,コミット又はロールバック可否の問合せを参加者に送る直前に障害になった。
- イ:調停者のトランザクションが,コミット又はロールバックの決定を参加者に送る直前に障害になった。
- ウ:調停者のトランザクションに,コミット又はロールバック可否の応答を参加者が返す直前に障害になった。
- エ:調停者のトランザクションに,コミット又はロールバックの完了を参加者が返す直前に障害になった。
TSUNAGARU-ADVICE
まず押さえたいこと
2相コミットでは、第1相で調停者が各参加者にコミット可能かを確認し、第2相で全体をコミットするかロールバックするかの最終決定を通知します。参加者がコミット可能と応答した後、この最終決定を受け取れないと、自分だけでは処理を確定できません。
迷ったときの判断軸
ポイントは、参加者が「コミット可能」と返した後、調停者から最終決定が届かない状況です。調停者がコミット又はロールバックの決定を参加者へ送る直前に通信できなくなると、参加者はコミットすべきかロールバックすべきか判断できず待機状態になります。
科目Bにつなげるために
特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、2相コミットを第1相=投票、第2相=最終決定として整理しましょう。調停者の障害によって参加者が決定待ちになるブロッキングの問題は、分散システムの可用性や障害設計にもつながります。

2相コミットでは、第1相で調停者が各参加者にコミット可能かを問い合わせ、参加者からの応答を集めます。第2相では、その結果を基に調停者がコミット又はロールバックを決定し、その決定を参加者へ通知します。
参加者が「コミット可能」と応答した後は、自分だけの判断でコミットやロールバックを行えません。その状態で、調停者がコミット又はロールバックの決定を参加者へ送る直前に障害が発生すると、参加者は最終的な決定を受け取れず、どちらを実行すべきか判断できなくなります。この状態はブロッキングと呼ばれます。
したがって、イが適切です。
❌他選択肢が誤りの理由ア:調停者のトランザクションが,コミット又はロールバック可否の問合せを参加者に送る直前に障害になった。
⇒第1相の問合せ自体が参加者に届いていないため、参加者はまだコミット準備状態になっていません。コミットかロールバックかを待ち続ける状態にはなりません。
ウ:調停者のトランザクションに,コミット又はロールバック可否の応答を参加者が返す直前に障害になった。
⇒調停者が参加者から必要な応答を受け取れなければ、タイムアウトなどによってロールバックを決定できます。参加者が最終決定を知らずに待ち続ける状況とは異なります。
エ:調停者のトランザクションに,コミット又はロールバックの完了を参加者が返す直前に障害になった。
⇒参加者は既に調停者から最終決定を受け取り、コミット又はロールバックを実行しています。完了通知を返せなくても、参加者自身が処理方針を判断できない状態ではありません。