2相ロック(2相ロッキングプロトコル)
更新日:
用語解説
2相ロックは、トランザクションがロックを獲得する段階(成長相)と、ロックを解放する段階(縮退相)を分け、一度でもロックを解放したら、それ以降は新しいロックを獲得しないという規則です。
■ 試験で押さえるポイント
2相ロックに従うと、同時に実行したトランザクションの結果が、順番に1つずつ実行した場合と同じになること(直列化可能性)が保証されます。
2相ロックに従っていても、デッドロックは起こり得ます。互いに相手がロックしているデータを待ち合うと、どちらも進めなくなります。
共有ロック(読取り)どうしは両立しますが、専有ロック(更新)は他のロックと両立しません。待ちが発生するかは、この組合せで判断します。
複数のデータベースの更新をそろえて確定させる「2相コミットメント」とは別のものです。
相 | できること | できないこと |
|---|---|---|
成長相 | ロックを獲得する | ロックを解放する |
縮退相 | ロックを解放する | 新しいロックを獲得する |
■ 選択肢での判断ポイント
デッドロックが起きるかどうかは、各トランザクションが「持っているロック」と「待っているロック」を書き出し、待ちの関係が輪(AはBを待ち、BはAを待つ)になるかで判断します。共有ロックどうしは待たないことに注意します。