質問:SQL Serverの行/ページ/テーブルロックはいつ発生しますか?
レスポンス:ロックエスカレーションを参照しています。 1つのtsql文が1つのパーティション上で少なくとも5000のロックを取得した場合、単一の非パーティション表または索引で少なくとも5000のロックが取得された場合は、 (2)ロック・エスカレーション(行/ページ/表)が発生する インスタンス内のロックの数がメモリーまたは構成のしきい値を超えた場合に、パーティション表 (3)。 (4)ロック競合によってエスカレーションが防止される場合、SQL Serverは1,250個の新しいロックが必要になるごとにロックエスカレーションをトリガーします。
文が1つの索引で3,000のロックを取得し、同じ表の別の索引で3,000のロックを取得すると、ロックのエスカレーションは起動されません。同様に、ステートメントがテーブルに自己結合を持っていて、テーブルへの各参照がテーブル内の3,000のロックしか取得しない場合、ロックエスカレーションはトリガーされません。
ロックエスカレーションは、エスカレーションがトリガーされた時点でアクセスされたテーブルに対してのみ発生します。
ロックの数がロックエスカレーションのメモリしきい値を超えるたびに、データベースエンジンによってロックエスカレーションがトリガーされます。メモリのしきい値は、ロック設定オプションの設定によって異なります。
ロックオプションがデフォルト設定の0に設定されている場合、ロックオブジェクトによって使用されるメモリがメモリの24%の場合、ロックエスカレーションのしきい値に達しますAWEメモリを除き、データベースエンジンで使用されます。ロックを表すために使用されるデータ構造は、およそ100バイトです。このしきい値は動的です。これは、データベースエンジンがさまざまなワークロードに合わせてメモリを動的に取得して解放するためです。
locksオプションが0以外の値の場合、locksオプションの値のロック・エスカレーション・スレッショルドは40%(またはメモリー圧がある場合はそれ以下)です。
以下は、データベース・インスタンスのresource_database_idは=
は、豊富な情報があり
SELECT RESOURCE_TYPE、resource_associated_entity_id、 request_status、request_mode、request_session_id、sys.dm_tran_locks FROM resource_description をロック情報を返します。オンラインで利用可能:SQL Server Books Online(BOL) –