2相ロック(2相ロッキングプロトコル)

更新日:

用語解説

2相ロックは、トランザクションがロックを獲得する段階(成長相)と、ロックを解放する段階(縮退相)を分け、一度でもロックを解放したら、それ以降は新しいロックを獲得しないという規則です。

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

  • 2相ロックに従うと、同時に実行したトランザクションの結果が、順番に1つずつ実行した場合と同じになること(直列化可能性)が保証されます。

  • 2相ロックに従っていても、デッドロックは起こり得ます。互いに相手がロックしているデータを待ち合うと、どちらも進めなくなります。

  • 共有ロック(読取り)どうしは両立しますが、専有ロック(更新)は他のロックと両立しません。待ちが発生するかは、この組合せで判断します。

  • 複数のデータベースの更新をそろえて確定させる「2相コミットメント」とは別のものです。

相

できること

できないこと

成長相

ロックを獲得する

ロックを解放する

縮退相

ロックを解放する

新しいロックを獲得する

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

デッドロックが起きるかどうかは、各トランザクションが「持っているロック」と「待っているロック」を書き出し、待ちの関係が輪(AはBを待ち、BはAを待つ)になるかで判断します。共有ロックどうしは待たないことに注意します。