分散データベースシステムにおける2相コミットの処理手順【午前2 解説】
要点まとめ
- 結論:2相コミットは「コミット準備完了の確認後にコミット命令を発行」する手順が正しいです。
- 根拠:分散トランザクションの整合性を保つため、全サイトの準備完了を確認してから一斉にコミットを行います。
- 差がつくポイント:準備段階での応答の意味と、コミット失敗時の再試行の誤解を避けることが重要です。
正解の理由
選択肢イは、主サイトが各データベースサイトに「コミット可能かどうか」を確認し、全サイトが準備完了を返した後にコミット命令を発行する流れを正確に示しています。これが2相コミットの基本的なプロトコルであり、トランザクションの原子性を保証します。
よくある誤解
2相コミットでは、準備ができていない場合にだけ応答を返すわけではなく、全サイトからの応答を待ちます。また、コミット失敗時に再度コミットを発行することはありません。
解法ステップ
- 主サイトが各データベースサイトに「コミット準備要求(prepare)」を送信する。
- 各サイトはトランザクションの準備ができていれば「準備完了(yes)」を返し、できなければ「中止(no)」を返す。
- 主サイトは全サイトから「準備完了」の応答を受け取った場合、コミット命令を送信する。
- 各サイトはコミット命令を受けてトランザクションを確定し、応答を返す。
- いずれかのサイトが「中止」を返した場合、主サイトは全サイトにロールバック命令を送る。
選択肢別の誤答解説
- ア: 「準備ができていない場合だけ応答を返す」は誤り。全サイトから応答を受け取り、準備完了か否かを判断します。
- イ: 正解。全サイトの準備完了を確認後にコミットを発行する正しい手順です。
- ウ: コミット失敗時に再度コミットを発行するのは誤り。失敗時はロールバックを行います。
- エ: ロック成功後に即コミットを発行するのは誤り。2相コミットでは準備段階とコミット段階を分けて管理します。
補足コラム
2相コミットは分散トランザクションの整合性を保つための標準的なプロトコルです。1相目で「準備完了」を確認し、2相目で「コミットまたはロールバック」を決定します。これにより、全サイトが同じ状態になることを保証しますが、ネットワーク障害時にはデッドロックや待機状態が発生するリスクもあります。
FAQ
Q: 2相コミットで全サイトが準備完了しなかった場合はどうなる?
A: 主サイトは全サイトにロールバック命令を送り、トランザクションを中止します。
Q: 2相コミットと3相コミットの違いは?
A: 3相コミットは2相コミットの問題点(デッドロックなど)を改善するために、さらに段階を増やしたプロトコルです。
関連キーワード: 分散トランザクション、2相コミット、データベース整合性、トランザクション管理、分散システム