ホーム > データベーススペシャリスト試験 > 2015年
データベーススペシャリスト試験 2015年 午前2 問12
分散データベースのトランザクションは複数のサブトランザクションに分割され, 複数のサイトで実行される。このとき, トランザクションのコミット制御に関する記述のうち, 適切なものはどれか。
ア:2相コミットでは, サブトランザクションが実行される全てのサイトからコミット了承応答が主サイトに届いても, 主サイトはサブトランザクションごとにコミット又はロールバックの異なる指示をする場合がある。
イ:2相コミットを用いても, サブトランザクションが実行されるサイトに主サイトの指示が届かず、サブトランザクションをコミットすべきかロールバックすべきか分からない場合がある。(正解)
ウ:2相コミットを用いると, サブトランザクションがロールバックされてもトランザクションがコミットされる場合がある。
エ:集中型データベースのコミット制御である1相コミットで、個々のサイトが独自に分散データベースのコミットを行っても, サイト間のデータベースの一貫性は保証できる。
解説
分散データベースのトランザクションのコミット制御【午前2 解説】
要点まとめ
- 結論:分散トランザクションの2相コミットでは、主サイトの指示が届かず状態が不明になることがあるため注意が必要です。
- 根拠:2相コミットは全サイトの合意を得てからコミットを行うが、通信障害などで指示が届かない場合が存在します。
- 差がつくポイント:2相コミットの仕組みとその限界を理解し、通信障害時のトランザクション状態の不確定性を正しく把握することが重要です。
正解の理由
選択肢イは、2相コミットの特徴を正確に表しています。2相コミットは「準備フェーズ」と「コミットフェーズ」の2段階で処理を進めますが、準備フェーズで全サイトがコミット可能と応答しても、コミットフェーズの指示が届かない場合、サブトランザクションはコミットすべきかロールバックすべきか判断できず、状態が不確定になります。これが2相コミットの典型的な問題点であり、選択肢イが適切です。
よくある誤解
2相コミットは必ず全サイトで一貫したコミットやロールバックが行われると誤解されがちですが、通信障害時には状態が不確定になることがあります。
解法ステップ
- 分散トランザクションが複数サイトで実行されることを理解する。
- 2相コミットの「準備フェーズ」と「コミットフェーズ」の流れを確認する。
- 各サイトが準備完了を報告した後、主サイトがコミットまたはロールバックの指示を出すことを把握する。
- 通信障害などで主サイトの指示が届かない場合の状態不確定性を認識する。
- 選択肢の内容と2相コミットの特徴を照らし合わせて正解を選ぶ。
選択肢別の誤答解説
- ア: 2相コミットでは全サイトが同じ指示(コミットかロールバック)を受けるため、サイトごとに異なる指示を出すことはありません。
- イ: 正解。主サイトの指示が届かず状態が不明になることがある点を正しく述べています。
- ウ: 2相コミットは全サイトの合意がない限りコミットしないため、サブトランザクションがロールバックされても全体がコミットされることはありません。
- エ: 1相コミットは分散環境での一貫性を保証できず、サイト間で独自にコミットすると整合性が崩れるため誤りです。
補足コラム
2相コミットは分散トランザクションの整合性を保つ基本的なプロトコルですが、通信障害時にトランザクションが「不確定状態(in-doubt)」になる問題があります。これを解決するために3相コミットや分散ロック、タイムアウト機構などの拡張技術が研究されています。
FAQ
Q: 2相コミットの「準備フェーズ」とは何ですか?
A: 各サイトがトランザクションをコミット可能かどうかを確認し、準備完了の応答を主サイトに返す段階です。
A: 各サイトがトランザクションをコミット可能かどうかを確認し、準備完了の応答を主サイトに返す段階です。
Q: 2相コミットで状態が不確定になるのはなぜですか?
A: 主サイトからの最終指示が通信障害などで届かない場合、サブトランザクションはコミットかロールバックか判断できず状態が不明になるためです。
A: 主サイトからの最終指示が通信障害などで届かない場合、サブトランザクションはコミットかロールバックか判断できず状態が不明になるためです。
関連キーワード: 分散トランザクション, 2相コミット, コミット制御, トランザクション整合性, 不確定状態