一般的な待機ではなくロックに特に関心があるため、locks_lock_waits
拡張イベントはより適切に聞こえます。
フィルターをオンにして increment >= 200
CREATE EVENT SESSION [locks_lock_waits] ON SERVER
ADD EVENT sqlserver.locks_lock_waits(
ACTION(sqlserver.sql_text)
WHERE ( [sqlserver].[is_system] = 0
AND [increment] >= 200
AND [counter] <= 1000 )
)
ADD TARGET package0.ring_buffer;
GO
ALTER EVENT SESSION [locks_lock_waits]
ON SERVER STATE = start;
上記では、しきい値の時間ロックを待機しているステートメントを収集しますが、特定のロックリソースは提供しません。
私はこのイベントを使用したことはなく、このセッションが実稼働サーバーでどれほどのオーバーヘッドを引き起こすかについての洞察もありません。
このビデオをトピックで見つけました。counter
収集するイベントの数を減らすためにフィルタリングを強くお勧めしますが、上記で行っています。
古いレガシーの文書化されていないコマンドについても言及しています
dbcc lock(StallReportThreshold, 200) -- 200 is threshold in ms
which(トレースフラグ3605が有効な場合)は、以下のような限られた情報をSQL Serverエラーログにダンプします。
プロセス53はRIDのSロックを6844ミリ秒待機しました:2:1:120:2結果:OKWAIT
文書化されており、はるかに強力であるため、とにかく拡張イベントが明らかに好ましいため、これを渡す際に言及します。