Open棟梁Project - マイクロソフト系技術情報 Wiki
SQL Serverでは、ロックのリソースが多くなると、
ロック エスカレーションという処理が走り、ロックの粒度を、
『行』 ⇒ 『ページ』 ⇒ 『テーブル』
と大きくすることで、ロックリソースの削減を図り、全体のパフォーマンスを改善しようとする。
SQL Serverでは、ユーザ プログラムの処理で使用できる、最も低い分離レベルである、コミット済み読み取り(Read Committed)を適用した場合でも、参照処理で一時的なロック(共有ロック)を適用するため、参照処理が、大量の行ロックを獲得する場合は、ロック エスカレーションが発生する可能性がある。SQL Serverのデッドロックは、多くのプロジェクトで問題として報告されている。
ここでは、
の3点について説明する。
ロック エスカレーション発生の閾値は、具体的には次のような数値をベースにしている。
※ ただし、この閾値はベースとなる値を示すだけであり、実際は統計情報に左右される。
トレース フラグ 1224 or 1211 を有効にして、ロック エスカレーションを無効にすることもできる。
ただし、トレース フラグ1211でロック エスカレーションを無効にした場合、下記の問題が発生するため、推奨はできない。
トレース フラグ1211でロック エスカレーションを抑止した場合、
ロックリソースの不足に起因する『エラー1204』が発生する可能性がある。