【にそうロック】
二相ロック(2PL) とは?
最終更新:
💡 ロックを取り終えてから、手放す段階へ
トランザクションのロック取得と解放を2つの段階に分ける方式。一度ロックを解放したら新しいロックを取らず、競合するアクセスを適切に保護することで競合直列化可能性を得る。
📌 このページのポイント
二相ロックって、ロックが2種類あるの?
2つなのは時間の段階だよ。成長フェーズで必要なロックを取り、縮小フェーズで手放す。一度でも手放したら、そのトランザクションでは新しいロックを取らないんだ。
それで並行処理も安全になる?
ロックポイントはどこ?
最後のロックを取得した時点だよ。その後はロックを保持し、やがて解放を始める。ロックを全部持っている時間がある場合、最後の取得と最初の解放は同じ瞬間とは限らないんだ。
Strict 2PLは何を厳しくするの?
少なくとも排他ロックをコミットかアボートまで保持するよ。未確定の書き込みを他のトランザクションが読み書きする問題や、アボートの連鎖を防ぐ。共有ロックも終了まで持つ定義・実装もあるので、資料の定義を確認しよう。
二相ならデッドロックも防げる?
もっと詳しく知りたい人へ
存在する行を二相でロックすれば、範囲検索も安全ですか?
それだけでは足りません。検索条件に合う新しい行の挿入を防げない場合があるため、述語ロック・範囲ロックなどで条件に関わる競合も保護する必要があります。
まとめ:ざっくりこれだけ覚えればOK!
「二相ロック」って出てきたら「ロックを取る段階と手放す段階を分けるルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Two-Phase Locking」 = 二相ロック
💬 ロックを取る成長(growing)と、手放す縮小(shrinking)の2つの相(フェーズ)に分けて使うから、この名前だよ