読み方 : にそうロック

2相ロック【ツーフェーズロック】2PL

別名  :Two-Phase Locking/2相ロッキングプロトコル

2相ロックとは?

データベーストランザクション処理などで用いられるロック制御の方式の一つで、複数の資源にロックを獲得する段階と解放する段階を分ける方式。並行して実行される複数のトランザクション間でのデータ不整合を防ぎ、処理の整合性を保つために用いられる。
2相ロックのイメージ画像

トランザクションの実行中、必要なデータや資源に対して順次ロックを獲得していく段階を「成長相」と呼ぶ。その後、処理の完了に伴ってロックを順次解放していく段階を「縮退相」と呼ぶ。2相ロックの規則は「一つでもロックを解放したら、すべて解放し終わるまで新たなロックを獲得できない」というものである。成長相と縮退相は一方向にしか移行せず、行き来することはない。

複数のトランザクションがこの規則に従うことで、並行するデータアクセスが直列化され、あるトランザクションの処理途中に別のトランザクションデータを書き換えてしまうような不整合を防ぐことができる。すべてのトランザクションが2相ロックに従う場合、その実行結果は何らかの直列実行と同等になることが理論的に保証される。この性質を「直列化可能性」(serializability)という。

一方で、複数のトランザクションが互いに相手のロック解放を待ち続ける「デッドロック」(deadlock)が発生する可能性がある。そのため、実際のデータベース管理システムDBMS)では、デッドロックの検出やタイムアウトによる回避機構と組み合わせて運用されることが多い。

ロックの解放をコミット時にまとめて行う方式を「厳密な2相ロック」(S2PL:Strict 2PL)といい、コミット前に保持したロックを一切手放さないため、未確定の更新結果を他のトランザクションが参照してしまう「ダーティリード」や「カスケードロールバック」を防ぎやすい。多くの商用データベース製品ではS2PLをベースとした実装が採用されている。一方、トランザクション開始時点でロックの獲得をすべてまとめて行う方式を「保守的な2相ロック」(C2PL:Conservative 2PL)といい、デッドロックを原理的に回避できるが、使用する資源を事前に確定しなければならないため実装上の制約が大きい。

他の辞典等による「2相ロック」の解説 (外部サイト)

資格試験などの「2相ロック」の出題履歴

▼ 基本情報技術者試験
令1秋 問29】 2相ロッキングプロトコルに従ってロックを獲得するトランザクションA,Bを図のように同時実行した場合に,デッドロックが発生しないデータ処理順序はどれか。
この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。