同様に構成された2つの2008r2 SQL Server "A"と "C"を使用する顧客サイトがあります。両方のサーバーで、トレースフラグ1204および1222が有効になっていて、DBCC tracestatus
は、両方のサーバーで以下を示します。
TraceFlag Status Global Session
1204 1 1 0
1222 1 1 0
3605 1 1 0
Aでは、トレースフラグは期待どおりに機能し、デッドロックが発生すると、エラーログに1204と1222の両方のデッドロックレポートが記録されます。ただし、Cでは、1204レポートのみが表示され、1222レポートは取得されません。
私の人生では、この違いの理由はわかりません。私はこれを広範囲にグーグルで調べて、これらのトレースフラグに関するMSドキュメントを読んだ(そしてもう一度読んだ)ので、このような動作のレポートも、原因のヒントも見つかりません。近づいている唯一のことは、どちらのトレースフラグも機能していないという時折の主張ですが、これらはすべて、有効化コマンドにタイプミスがあった場合のケースであることが判明しました。 DBCC TRACESTATUSを使用して確認したので、これは当てはまりません。
したがって、onlyトレースフラグ1222が機能しない原因や、それを修正する方法に関する洞察は、高く評価されます。
さて、ここに興味深い展開があります。自分でデッドロックを生成するたびに(このコードを使用して https://stackoverflow.com/questions/7813321/how-to-deliberately-cause-a-deadlock )、両方のトレースレポートをエラーログ。デッドロックレポートの1つだけをトリガーするように見えるのは、アプリケーションから数日ごとに発生する「自然な」デッドロックだけです。これが役立つかどうかはわかりませんが、トレース1222が1204と同じデッドロック状態のすべてについて報告しないと考える理由はありますか?
私は同様の問題を抱えていましたが、それがあなたの問題を分類するかどうかはわかりません。
これを試して:
EXEC master..sp_altermessage 1205, 'WITH_LOG', TRUE;
GO
トレースフラグを介してイベントログに記録されていたとしても、電子メールをトリガーするために設定する必要があります。あなたはここにテーブルを見ることができます:
select * from master.sys.messages
where text like '%deadlock%'
あなたはより多くの詳細を持つことができます ここ