厳格2相ロックとは?げんかくにそうロック
厳格2相ロックとは、獲得した専有ロックをコミットまたはロールバックの時点まで一切解放しない2相ロック。未コミットの値が他のトランザクションから読まれないため、連鎖的な取消し(カスケードアボート)が起きない。実用DBMSのロック方式はおおむねこの形をとる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
素の2相ロックは直列化可能性を保証するが、縮退相で早めに解放した値を他のトランザクションが読める。読んだ後で元のトランザクションが失敗すれば、その値をもとに進んだ側も巻き戻さなければならず、取消しが芋づる式に広がる。解放をトランザクションの終了まで遅らせるだけで、この連鎖と回復の難しさが同時に消える。
具体例
PostgreSQLやSQL Serverでは、更新で獲得した行ロックはコミットまで保持される。その間、同じ行を更新しようとした側は待たされ、未確定の値を読むことはない。
試験での引っ掛け
「2相」が指すのはロックを獲得するだけの拡大相と解放するだけの縮退相であって、2相コミットの2フェーズ(準備・確定)とは無関係。名前が似ているため取り違えが頻出する。また2相ロックが保証するのは直列化可能性で、デッドロックは防げない。
関連用語
出た過去問
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問14(IPA)解説で登場
厳格な2相ロッキングプロトコルと表ロックを適用して、同時実行している他のトランザクションの処理結果に影響を与えないようにする。実現されるトランザクションの隔離性…
正解:SERIALIZABLE
要点:厳格2相ロック+表ロックはSERIALIZABLEを実現する
厳格な2相ロッキングでは獲得したロックをコミットまで解放せず、さらに表単位でロックをかければ、他のトランザクションはその表に一切手を出せなくなる。行の追加による現象まで含めてあらゆる干渉が排除されるため、最も高い隔離性水準であるSERIALIZABLEが実現される。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。