データベーススペシャリスト 2014年 午前2 問12
問題文
図は、分散システムにおける 2 相コミットプロトコルの正常処理の流れを表している。③の動作はどれか。

選択肢
ア:アンロック実行指示
イ:コミット可否問合せ
ウ:コミット実行指示(正解)
エ:ログ取得指示
🔒 解説は解答すると表示されます
コミット実行指示【午前2解説】
正解の理由
図中の終了処理は4段階のメッセージ交換で、①でコーディネータが参加者に「コミット可否を問い合わせる(prepare)」方向の送信があり、②で各参加者の可否(投票)がコーディネータへ返る構成になっています。続く③では、コーディネータが参加者に対して最終決定(コミットまたはロールバック)を一斉に通知するために再び下向きの送信が行われ、その後④で参加者からの実行完了応答が返されています。したがって③の動作は、参加者に対する「コミット実行指示」であり、選択肢の中では ウ に相当します。
解法ステップ
- 図の時系列(上→下)を確認し、各段階の送受信方向を読み取る。
- 2相コミット(2PC)の標準フローを想起する:
- 準備要求(prepare / voting request)→ 参加者の投票(yes/no)→ コーディネータの最終決定通知(commit/abort)→ 参加者の最終応答(ack)。
- 図中の①~④の対応を照らし合わせる:①が準備要求、②が投票応答、③が最終決定の通知、④が実行完了応答であると対応付ける。
- ③の送信は「決定を伝えて実行を指示する」役割と判断し、選択肢から該当するものを選ぶ。
選択肢別の誤答解説
- ア: アンロック実行指示
アンロックはコミット後に資源のロックを解除する副次的操作ですが、2PCの終了メッセージ列では「決定の通知」と「その応答」が主であり、図の③は決定通知の送信に該当します。よって③はアンロック指示ではありません。 - イ: コミット可否問合せ
これはprepareフェーズ(投票要求)に対応する動作で、図の時系列では①の位置に相当します。したがって③とは一致しません。 - ウ: コミット実行指示
図の③はコーディネータが参加者に対して最終決定を下し、その実行を指示しているメッセージの送信に該当するため該当します。 - エ: ログ取得指示
ログ取得(またはログの照会)は通常2PCのプロトコル図には明示されないか、内部処理として行われる別作業です。図の③は参加者への決定通知であり、ログ取得指示ではありません。
よくある誤解
- 「下向きのメッセージ=準備要求」と思い込みがちだが、図中では同じ向きのメッセージが複数のフェーズで使われるため、時系列番号を確認してフェーズを判定する必要がある。
- コミット可否問合せ(prepare)とコミット実行指示(commit)は役割が似て見えるため混同しやすい。prepareは「投票依頼」、commitは「実行命令」である点を意識すること。
- ログ操作やアンロックなどの内部処理を図のメッセージと混同しないこと。2PCのシーケンス図は参加者間/コーディネータ間のメッセージに焦点がある。
補足コラム
2相コミット(2PC)はコーディネータが参加者全員の同意を得てから最終決定を下すため、分散トランザクションの整合性を保てますが、単一障害点(コーディネータの障害)やブロッキング問題がある点が弱点です。これを改善するのが3相コミット(3PC)や、分散環境向けに設計された非同期合意アルゴリズム(例:Paxos、Raft)です。実運用では、決定を永続化するためのログ(書き込み先)やタイムアウト、再送・回復手順も重要になります。
FAQ
Q: 参加者が投票で「no」を返したらどうなる?
A: コーディネータは全員の投票を集め、1つでも「no」があれば最終決定はabort(ロールバック)となり、その旨を参加者に通知します(③の段階でabort通知を送る)。
A: コーディネータは全員の投票を集め、1つでも「no」があれば最終決定はabort(ロールバック)となり、その旨を参加者に通知します(③の段階でabort通知を送る)。
Q: ③で送るメッセージがコミットかabortかはどこで決まる?
A: コーディネータが②で受け取った全参加者の投票結果を集約して決定し、その決定を③で一斉に通知します。
A: コーディネータが②で受け取った全参加者の投票結果を集約して決定し、その決定を③で一斉に通知します。
Q: 参加者が③の指示を受け取った後に失敗したら?
A: 参加者は実行結果をログに残し、復旧時にログを参照して状態を復元する。コーディネータや他参加者と再同期することで整合性を確保します。
A: 参加者は実行結果をログに残し、復旧時にログを参照して状態を復元する。コーディネータや他参加者と再同期することで整合性を確保します。
関連キーワード: 2相コミット, 2PC, コーディネータ, prepare, commit, 投票フェーズ, トランザクション終了

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

