SQL Server 2008 には、デッドロックに関係するプロセスとクエリを特定する複数の方法があります。
- <リ>
デッドロックが再現しやすい場合は、頻度が高くなり、SQL プロファイラーを使用して SQL サーバーをプロファイリングできます (プロファイラーが有効になっていると、サーバーへのアクセスとパフォーマンスのコストがかかります)。デッドロック グラフを使用する必要があるhttp://sqlmag.com/データベース-パフォーマンス-チューニング/収集-デッドロック-情報-デッドロック-グラフ
<リ>ほとんどの場合、デッドロックの再現は困難です。または、プロファイラーを接続してパフォーマンスに影響を与えたくない本番環境で発生します。
このクエリを使用して、デッドロックが発生したことを取得します:
SELECT xed.value('@timestamp', 'datetime') as Creation_Date, xed.query('.') AS Extend_Event FROM ( SELECT CAST([target_data] AS XML) AS Target_Data FROM sys.dm_xe_session_targets AS xt INNER JOIN sys.dm_xe_sessions AS xs ON xs.address = xt.event_session_address WHERE xs.name = N'system_health' AND xt.target_name = N'ring_buffer' ) AS XML_Data CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xed) ORDER BY Creation_Date DESC
プレ>デッドロックを修正するために (NOLOCK) を使用する方向には行きません。それは滑りやすい斜面であり、元の問題を隠しています。