2011-10-31 22 views
1

誰かが私にSQL Server(2008)のエスカレーションをロックしたりロックしたりすることについて少し説明できるか、それについての良い記事を教えてくれるのだろうかと思っていました。SQL Serverの行/ページ/テーブルロックはいつ発生しますか?

いつ(行/ページ/テーブル)ロックが発生する可能性が高いか、どのシナリオのSQL Serverがロックをエスカレートするかを理解したいと思います。

たとえば、指定されたトランザクションを持たないdelete文は、多くの行が削除されている場合にテーブルロックを引き起こすか、明示的なトランザクションを使用する場合にのみロックが発生しますか?

私はこれが潜在的に大きな問題であることがわかっていましたが、どんな入力も感謝しています。

ダーク

+2

は、豊富な情報があり

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) –

答えて

2

質問: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は=

関連する問題