SQL Server 2008 R2 まではデッドロックが発生した際の情報取得として、トレースフラグ (1204 / 1222) を設定していました。
SQL Server 技術情報 – デッドロックの解決方法
デッドロックの検出と終了
デッドロック調査用の情報採取
SQL Server 2012 では拡張イベントでデッドロックの情報取得がデフォルトで設定されています。
今回は SQL Server 2012 のデッドロック情報の取得について見ていきたいと思います。
■デフォルトの拡張イベントを使用したデッドロック情報の取得
SQL Server 2012 ではデフォルトで [system_health] という拡張イベントが設定されており、有効になっています。
この拡張イベントでは様々な情報が取得されており、この中には [xml_deadlock_report] が含まれています。
デフォルトの設定では、[event_file] として [5MB 4 世代]、[ring_buffer] として [5000 イベント 4MB] の情報が取得されるようになっています。
# データストレージを削除して再設定することで変更することができます。初期の設定に戻したい場合は、[C:Program FilesMicrosoft SQL ServerMSSQL11.<instanceid>MSSQLInstall] の [u_tables.sql] を実行することで再設定できます。
この拡張イベントから情報を取得することで、データストレージに出力されているデッドロックの情報を確認することができます。
情報の取得手順は、
- [管理] → [拡張イベント] → [セッション] → [system_health] → [package0.event_file] を右クリックして [ターゲット データの表示] をクリック
- [name] でグループ化を実施
- [xml_deadlock_report] を確認
という操作をすることでデッドロックの情報を確認することができます。
デッドロックが発生した際に実行されるクエリに関しては、[詳細] タブの [xml_report] をダブルクリックして展開するか、
[デッドロック] のタブでポイントを置いた状態にすることで確認することができます。
デッドロック以外の情報も取得されているため、負荷が高いシステムではファイルサイズについては考慮しないといけないと思いますが、この手の情報収集をするための設定がデフォルトでされていると後追いで情報を取る時に便利でよいですね。