本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問5 2相コミットプロトコル
分散データベースの整合性を保つ2相コミットプロトコルの動作プロセスと、主サイト・従サイト間の決定ルールを問う問題です。
【問題】
分散データベースシステムにおいて、2相コミットプロトコルを用いてトランザクションを同期制御する。主サイト(コーディネーター)が全従サイト(コホート)にコミットの準備(Prepare)を要求した後の動作として、適切なものはどれか。
ア 一部の従サイトから否決(VOTE_ABORT)の応答を受け取った場合でも、過半数の従サイトから合意(VOTE_COMMIT)の応答があれば、主サイトはコミットを決定する。 イ すべての従サイトから合意(VOTE_COMMIT)の応答を受け取った場合、主サイトはコミットを決定し、全従サイトへコミット指示(GLOBAL_COMMIT)を送信する。 ウ 従サイトは、主サイトからの準備要求を受信した時点で、ローカルなコミット処理を完全に完了させてから合意応答を返信する。 エ 準備要求送信後、特定の従サイトからの応答が一定時間内にない場合、主サイトは通信障害とみなし、単独でコミットを強行する。
【解説】
2相コミットプロトコル(Two-Phase Commit Protocol: 2PC)は、分散データベース環境において、複数のノード(サイト)にまたがるトランザクションの原子性(Atomicity:すべて実行されるか、全く実行されないかのどちらかである性質)を保証するためのプロトコルです。
このプロトコルは、以下の2つのフェーズ(相)に分かれて実行されます。
1. 第1相:投票フェーズ(Prepare Phase)
主サイト(調整者)がすべての従サイト(参加者)に対し、コミットの準備が可能かどうかの問い合わせ(Prepare)を送信します。 各従サイトは、自身のローカルな更新処理が問題なく完了できる状態(ログの書き出し完了など)であれば「合意(VOTE_COMMIT)」、不可であれば「否決(VOTE_ABORT)」を主サイトに応答します。
2. 第2相:決定フェーズ(Commit Phase)
主サイトは、すべての従サイトからの応答を回収し、次のルールに基づいて最終決定を下します。
全員が「合意」の場合:主サイトはコミットを決定し、全員に「コミット指示(GLOBAL_COMMIT)」を送ります。
1つでも「否決」または「タイムアウト(無応答)」がある場合:主サイトはロールバックを決定し、全員に「ロールバック指示(GLOBAL_ABORT)」を送ります。
sequenceDiagram
autonumber
Participant Coordinator as 主サイト
Participant Cohort as 従サイト
Note over Coordinator, Cohort: Phase 1 (Prepare Phase)
Coordinator ->> Cohort: Prepare
Note over Cohort: Check local state
Cohort -->> Coordinator: VOTE_COMMIT
Note over Coordinator, Cohort: Phase 2 (Commit Phase)
Note over Coordinator: Decision (All Yes)
Coordinator ->> Cohort: GLOBAL_COMMIT
Note over Cohort: Execute commit
Cohort -->> Coordinator: ACK
【選択肢の吟味】
| 選択肢 | 判定 | 解説 |
|---|---|---|
| ア | 誤り | 2相コミットでは、1サイトでも否決(VOTE_ABORT)を返した場合は、過半数に関わらず全体をロールバック(GLOBAL_ABORT)します。 |
| イ | 正解 | すべての従サイトから合意(VOTE_COMMIT)を得られた場合にのみ、主サイトはコミットを決定し、GLOBAL_COMMITを送信します。 |
| ウ | 誤り | 準備要求(Prepare)の段階では、従サイトはコミットできる状態にする(ログへの記録など)だけであり、最終指示があるまでコミットは完了しません。 |
| エ | 誤り | 応答が一定時間ない(タイムアウト)場合、主サイトは障害とみなして「ロールバック(GLOBAL_ABORT)」を指示します。強行コミットは行いません。 |
【ポイント】
全員一致が原則:1つでも否決やタイムアウトがあれば、全体がロールバックされる(All or Nothingの徹底)。
2段階のフェーズ:第1相で「準備(Prepare)と合意(Vote)」、第2相で「最終決定(Commit / Abort)」。
主従の役割:主サイト(コーディネーター)が全体の合否を判定し、従サイト(コホート)は自サイトの成否を返す。


コメント