基本情報技術者 2017年 春期 午前(科目A) 問28
問題文
分散データベースシステムにおいて、一連のトランザクション処理を行う複数サイトに更新処理が確定可能かどうかを問い合わせ、全部のサイトが確定可能である場合、更新処理を確定する方式はどれか。
選択肢
ア:2相コミット(正解)
イ:排他制御
ウ:ロールバック
エ:ロールフォワード
🔒 解説は解答すると表示されます
2相コミット方式【午前解説】
正解の理由
問題文は「複数サイトに対して確定可能か問い合わせ、全部のサイトが確定可能である場合に更新を確定する」と述べています。これは分散トランザクションにおける典型的な二相(2-phase)コミットプロトコルの動作そのものであり、まず参加サイト全てに「prepare(確定準備)」を問い合わせて投票(可/不可)を集め、全員が可であれば「commit」を送って最終確定するため、正解はアの2相コミットです。
解法ステップ
- 問題文のキーワード(複数サイト、問い合わせ、全部が確定可能なら確定)を抽出する。
- 分散トランザクションに関するプロトコル候補を思い浮かべる(2相コミット、排他制御、ロールバック、ロールフォワード等)。
- 各候補の目的を照らし合わせる(合意形成か、並行制御か、回復手段か)。
- 「全員が可なら最終確定」という表現は合意プロトコル(2相コミット)を示すため選択する。
選択肢別の誤答解説
- ア: ア 2相コミット — 正解。準備(prepare)で各サイトに可否を問い合わせ、全員が可ならcommitを発行して確定する分散合意プロトコルです。
- イ: 排他制御 — 誤り。排他制御は同時実行(コンカレンシ)を制御して矛盾を避けるためのロック等の手法で、複数サイトに合意を取って確定する仕組みではありません。
- ウ: ロールバック — 誤り。ロールバックはトランザクションを取り消して元に戻す操作(undo)であり、分散サイト全員の可否を問い合わせて「可なら確定する」動作ではありません。
- エ: ロールフォワード — 誤り。ロールフォワードは障害復旧時にログを適用して進める(redo)手法で、トランザクション確定の合意プロトコルではありません。
よくある誤解
- 2相コミットは排他制御と同義だと誤解する人が多い。排他制御は同時実行制御で、2相コミットは分散確定の合意プロトコルです。
- 2相コミットが全ての障害を防ぐと考える誤り。コーディネータ故障時のブロッキング問題やログ・再起動による復旧が必要になります。
- ロールバックやロールフォワードと混同して、これらが分散合意を行う手段だと捉えるミスがあります。これらは主に局所的なリカバリ手法です。
補足コラム
2相コミットは分散トランザクションの古典的解法で、実装例としてはデータベースのXAトランザクションやメッセージングのトランザクションで使われます。利点は単純で原子性を保証しやすい点ですが、欠点としてコーディネータが故障すると参加者がブロックされる「ブロッキング問題」があります。この問題を緩和するための手法として3相コミット(3PC)や、PaxosやRaftのような合意アルゴリズム、あるいは分散トランザクションを避ける設計(補償トランザクションやサagasパターン)などが採られることもあります。
FAQ
Q: 2相コミットは常に安全ですか?
A: 安全(原子性)を保ちますが、コーディネータ障害時に参加者が待機状態(ブロック)になるなど可用性に課題があります。
A: 安全(原子性)を保ちますが、コーディネータ障害時に参加者が待機状態(ブロック)になるなど可用性に課題があります。
Q: 「全部が可であれば確定」という表現で否定されたらどうなる?
A: 1つでも不可(abort)の投票があれば、コーディネータは全員に中止(rollback)を通知してトランザクション全体を中断します。
A: 1つでも不可(abort)の投票があれば、コーディネータは全員に中止(rollback)を通知してトランザクション全体を中断します。
Q: 3相コミットと何が違うのですか?
A: 3相コミットは2相のブロッキング問題を軽減するために中間状態を導入し、障害時の非ブロッキング性を高める工夫を加えたプロトコルです。ただし実装が複雑になります。
A: 3相コミットは2相のブロッキング問題を軽減するために中間状態を導入し、障害時の非ブロッキング性を高める工夫を加えたプロトコルです。ただし実装が複雑になります。
関連キーワード: 分散トランザクション、2相コミット、コミットプロトコル、コーディネータ、投票フェーズ、ブロッキング問題、排他制御、ロールバック、ロールフォワード、ACID、XA

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

