SQL Server 2008 R 2デッドロック監視

4177 ワード

デッドロックモニタリングはずっと面倒で、私は良い方法を見つけられませんでした.
皆さんにいい方法があれば、私も勉強したいです.
私の方法は簡単です.
 1.sp_altermessage 1205は1205エラーを修正してログに書き込むことができるようにし、エージェントの警告を使用することができる.
 2.もちろん、起動エージェントの警告です.データベースメールを開くと、デッドロックエラーがオペレータメールボックスに送信されます.欠点は、詳細なデッドロック情報がないことです.
   3.sql server 2008 r 2に付属の拡張イベントでsystem_を使用healthのデフォルトはオンで、中には比較的多くの値が取り込まれます
sysを使ってもいいです.dm_xe_session_events連合sys.dm_xe_sessionsは、それらの値をキャプチャしたことを確認します.もちろん、そのうちの1つはデッドロック情報です.
デッドロックが発生した場合、どのように使用しますか.
SELECT

REPLACE(

REPLACE(XEventData.XEvent.value('(data/value)[1]', 'varchar(max)'), 

'<victim-list>', '<deadlock><victim-list>'),

'<process-list>','</victim-list><process-list>')



FROM

(select CAST(target_data as xml) as TargetData

from sys.dm_xe_session_targets st

join sys.dm_xe_sessions s on s.address = st.event_session_address

where name = 'system_health' ) AS Data

CROSS APPLY TargetData.nodes ('//RingBufferTarget/event') AS XEventData (XEvent)

where XEventData.XEvent.value('@name', 'varchar(4000)') = 'xml_deadlock_report'

すべてのデッドロック情報を検索します.もちろん、メモリのボトルネックが発生したときにどのくらい保存できるか分かりません.デッドロックが多すぎると、うまく見つからない場合は、結果を少し減らして、デッドロックを検索するたびに使用することができます.
ALTER EVENT SESSION system_health ON SERVER

STATE = stop

go



ALTER EVENT SESSION system_health ON SERVER

STATE = start

この拡張イベントのセッションを閉じて開くと、メモリに保存されているレコードが空になります.次のデッドロック情報は最新です.