ア:主サイトが各データベースサイトにコミット準備要求を発行した場合, 各データベースサイトは, 準備ができていない場合だけ応答を返す。
イ:主サイトは, 各データベースサイトにコミットを発行し, コミットが失敗した場合には, 再度コミットを発行する。
ウ:主サイトは, 各データベースサイトのロックに成功した後, コミットを発行し, 各データベースサイトをアンロックする。
エ:主サイトは, コミットが可能であることを各データベースサイトに確認した後, コミットを発行する。(正解)
解説
分散データベースシステムの2相コミット処理手順【午前2 解説】
要点まとめ
- 結論:2相コミットでは主サイトが全サイトのコミット準備完了を確認してからコミットを発行します。
- 根拠:全サイトの準備が整っていなければ一貫性を保てず、トランザクションの整合性が崩れるためです。
- 差がつくポイント:準備確認の応答の意味とコミット発行のタイミングを正確に理解することが重要です。
正解の理由
選択肢エは、2相コミットの基本的な流れを正確に表しています。主サイトはまず各データベースサイトに「コミット準備要求(prepare)」を送り、全サイトから「準備完了(yes)」の応答を受け取った後に初めて「コミット(commit)」を発行します。これにより、全サイトがトランザクションをコミットできる状態であることを保証し、一貫性を保ちます。
よくある誤解
2相コミットでは、準備ができていないサイトだけ応答するのではなく、全サイトが準備完了の応答を返す必要があります。コミット失敗時に再度コミットを発行することもありません。
解法ステップ
- 主サイトが各データベースサイトに「コミット準備要求」を送る。
- 各サイトはトランザクションの準備ができたら「準備完了」の応答を返す。
- 主サイトは全サイトから準備完了の応答を受け取ったことを確認する。
- 主サイトが「コミット」命令を全サイトに送る。
- 各サイトはコミットを実行し、ロックを解除する。
選択肢別の誤答解説
- ア:準備ができていない場合だけ応答するのは誤り。全サイトが準備完了の応答を返す必要があります。
- イ:コミット失敗時に再度コミットを発行するのは誤りで、失敗時はロールバック処理を行います。
- ウ:ロック成功後にコミットを発行するのは正しいが、2相コミットでは「準備完了の確認」が重要であり、アンロックはコミット後に行います。
- エ:全サイトの準備完了を確認してからコミットを発行する正しい手順です。
補足コラム
2相コミットは分散トランザクションの整合性を保つための代表的なプロトコルです。1相目で準備を確認し、2相目でコミットまたはロールバックを決定します。欠点としては、主サイトがダウンすると処理が停止する「ブロッキング問題」があります。
FAQ
Q: 2相コミットで全サイトが準備完了しなかった場合はどうなる?
A: 主サイトはコミットを中止し、全サイトにロールバック命令を送ります。
Q: 2相コミットと3相コミットの違いは?
A: 3相コミットはブロッキング問題を解消するために、さらに中間状態を設けて安全性を高めたプロトコルです。
関連キーワード: 分散トランザクション, 2相コミット, データベース整合性, トランザクション管理, 分散システム