トランザクション・排他制御・分離レベル 重要度:★★★出題: AM2・PM1・PM2
トランザクションの排他ロック粒度(行ロック・ページロック・表ロック)とロック昇格
はいたろっくりゅうどとろっくしょうかく / Lock Granularity & Lock Escalation
排他制御の対象範囲(行・ページ・テーブル)の大きさを表すロック粒度と、大量の行ロック獲得によるロックメモリ枯渇を防ぐために粗い粒度のロックへ切り替えるロックエスカレーション。
3行速習ポイント
- ロック粒度を細かく(行ロック)すると同時実行性は高まるが、ロック管理用のメモリ消費量と制御オーバヘッドが増加する
- ロック粒度を粗く(表ロック)するとロック管理コストは極小になるが、同じ表の別行を操作する他トランザクションまで待たされ同時実行性が低下する
- 意図ロック(IX/ISロック)により表ロックと行ロックの競合を高速判定し、行ロック数がしきい値を超えると表ロックへの「ロック昇格(エスカレーション)」またはロックメモリ枯渇が発生する
図解
図ロック粒度の階層と同時実行性・メモリ消費のトレードオフ
粗粒度
表ロック(Table Lock)
ロック管理メモリ最小・バッチ一括処理向きだが、他トランザクションの同時実行性は最低
↕
中粒度
ページロック(Page Lock)
データページ(ブロック)単位で排他制御を行う中間粒度
↕
細粒度
行ロック(Row Lock)
同時実行性が最も高くOLTPに最適だが、大量行更新時にロックメモリを大量消費
概要と本質
午前IIの排他制御問題および午後IIの物理設計・運用問題(令和6年午後II問1設問3(2)のロックメモリ不足問題など)で問われる重要概念です。
重要ポイント・コア概念
- ロック粒度と同時実行性・管理オーバヘッドのトレードオフ:行ロック(高並列・高メモリ消費)⇔ 表ロック(低並列・低メモリ消費)
- ページロックから行ロックへ設定変更した際の影響:1トランザクションが大量行を更新する場合、新たに大量の行単位ロックが掛かり「ロックメモリ」が枯渇するリスクがある
- 大量行を更新するバッチでは、最初からLOCK TABLE文でテーブルロックを取得するか、一定件数ごとにコミットして行ロックを解放することでロックメモリ枯渇を防ぐ
午後I・午後II記述試験での攻略ポイント
午後IIで「ロックの粒度をページ単位から行単位に変更した際、大量データを更新するバッチ処理でどのようなリソース不足障害が懸念されるか」と問われたら、『行単位のロックが新たに大量に掛かるため、ロック管理用のメモリ(ロックメモリ)が不足する』と答えます。
午後記述で使える加点キーワード(クリックでコピー)
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着データベーススペシャリスト 過去問演習で実践力を鍛える