2相コミットメント

更新日:

用語解説

2相コミットメント(2相コミット、Two-Phase Commit、2PC)は、複数のDB又は資源管理系にまたがる分散トランザクションを、全参加者でコミットするか全てロールバックするかに統一する原子コミットプロトコルです。

■ 試験で押さえるポイント

  • 第1相のprepareでは、調整者が全参加者へ準備を要求します。参加者は更新とコミットに必要なログを永続化してロックを保持し、commit可能ならYES、不可能ならNOを返します。

  • 第2相では、全員がYESなら調整者がCOMMITをログへ記録して通知し、一人でもNO又は所定の失敗ならROLLBACKを通知します。参加者は決定を記録して資源を解放します。

  • 障害が起きてもログから決定を再送できますが、YES回答後に調整者と通信不能になると参加者は独断で取消せず、決定を確認するまでin-doubt状態でロックを保持する場合があります。

  • 2PCは複数拠点の原子性を確保する方式で、ロックの取得期と解放期を分け直列化可能性を保つ2相ロック法とは目的も二つの相も異なります。

■ 選択肢での判断ポイント

prepareで全参加者の可否を集め、commit/rollbackを全員へ決定する順序を選びます。全員YESになる前に一部だけコミットする手順は原子性を壊します。

例: 銀行DBの引落しと商品DBの在庫減を行い、両者がprepareでYESなら双方をcommitします。在庫DBがNOなら銀行DBもrollbackし、引落しだけ残る状態を防ぎます。

同じ分野の用語