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つはデッドロック情報です.
デッドロックが発生した場合、どのように使用しますか.
すべてのデッドロック情報を検索します.もちろん、メモリのボトルネックが発生したときにどのくらい保存できるか分かりません.デッドロックが多すぎると、うまく見つからない場合は、結果を少し減らして、デッドロックを検索するたびに使用することができます.
この拡張イベントのセッションを閉じて開くと、メモリに保存されているレコードが空になります.次のデッドロック情報は最新です.
皆さんにいい方法があれば、私も勉強したいです.
私の方法は簡単です.
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
この拡張イベントのセッションを閉じて開くと、メモリに保存されているレコードが空になります.次のデッドロック情報は最新です.