令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問12
テクノロジデータベース分散DB・NoSQL
分散データベースのトランザクションが複数のサブトランザクションに分割され,複数のサイトで実行されるとき,トランザクションのコミット制御に関する記述のうち,適切なものはどれか。
解答・解説
正解: イ. 2相コミットを用いても,サブトランザクションが実行されるサイトに主サイトの指示が届かず,サブトランザクションをコミットすべきかロールバックすべきか分からない場合がある。
分散データベースにおいて、トランザクションを複数のサイトで実行する際、全体の整合性を保つための制御プロトコルとして2相コミットが用いられます。
2相コミットは、以下の2つのフェーズで構成されます。
- 第1フェーズ(準備フェーズ): 主サイト(コーディネータ)が各従サイト(パーティシパント)にコミットの準備を指示し、全サイトから「コミット可能(了承)」または「コミット不可(失敗)」の応答を受け取ります。
- 第2フェーズ(決定フェーズ): 全てのサイトから「了承」応答が返ってきた場合は全サイトにコミットを指示し、1つでも「不可」や応答なしがあった場合は全サイトにロールバックを指示します。
しかし、2相コミットにはネットワーク障害などによるブロッキングのリスクが存在します。第2フェーズにおいて、主サイトからの指示(コミットかロールバックか)が通信障害などにより従サイトに届かなかった場合、その従サイトはどちらの処理を実行すべきか判断できず、ロックを保持したまま待機状態に陥る場合があります。したがって、イが適切な記述となります。
各選択肢の解説
- ア: 誤り。全てのサイトからコミット了承応答が届いた場合、主サイトはトランザクションの原子性(全て実行するか、全て取り消すか)を保証するため、全サイトに対して必ず同じ「コミット」の指示を出します。サイトごとに異なる指示を出すことはありません。
- イ: 正解。上述の通り、主サイトからの指示が通信障害などで届かない場合、従サイトはコミットすべきかロールバックすべきか判断できず、待機状態になることがあります。
- ウ: 誤り。2相コミットでは、いずれかのサブトランザクションがロールバック(または準備失敗)となった場合、全体の整合性を保つためにトランザクション全体がロールバックされます。
- エ: 誤り。各サイトが独自にコミットを行う(1相コミット)と、あるサイトではコミット成功、別のサイトでは障害により失敗という状況が発生し得ます。これにより、サイト間のデータベースの一貫性が崩れてしまうため保証できません。