system_health セッションの使用
system_health セッションは、既定で SQL Server に含まれている拡張イベント セッションです。 このセッションは、SQL Server データベース エンジンの起動時に自動的に開始されます。実行中にパフォーマンスに大きな影響が及ぶことはありません。 データベース エンジンのパフォーマンスの問題をトラブルシューティングするのに役立つシステム データを収集します。 そのため、このセッションを停止または削除しないことをお勧めします。
このセッションでは、次の情報を収集します。
重大度が 20 以上のエラーが発生したすべてのセッションの sql_text と session_id。
メモリ関連のエラーが発生したすべてのセッションの sql_text と session_id。 エラーには、17803、701、802、8645、8651、8657、8902 などがあります。
応答していないスケジューラの問題の記録 (これらはエラー 17883 として SQL Server のエラー ログに書き込まれます)。
検出されたすべてのデッドロック。
ラッチ (またはその他の注目する必要があるリソース) での待機時間が 15 秒を超えるすべてのセッションの callstack、sql_text、および session_id。
ロックでの待機時間が 30 秒を超えるすべてのセッションの callstack、sql_text、および session_id。
プリエンプティブ待機のために長時間待機しているすべてのセッションの callstack、sql_text、および session_id。 待機時間は、待機の種類によって異なります。 プリエンプティブ待機とは、SQL Server が外部の API 呼び出しを待機している状態です。
CLR の割り当てと仮想の割り当ての失敗に対する呼び出し履歴と session_id。
メモリ ブローカー、スケジューラ モニター、メモリ ノード OOM、セキュリティ、接続性に関する ring_buffer イベント。
sp_server_diagnostics からのシステム コンポーネントの結果。
scheduler_monitor_system_health_ring_buffer_recorded によって収集されたインスタンスの正常性。
CLR 割り当ての失敗。
connectivity_ring_buffer_recorded を使用する接続のエラー。
security_error_ring_buffer_recorded を使用するセキュリティのエラー。
セッション データの表示
このセッションでは、リング バッファー ターゲットを使用して、データを格納します。 セッション データを表示するには、次のクエリを使用します。
SELECT CAST(xet.target_data as xml) FROM sys.dm_xe_session_targets xet
JOIN sys.dm_xe_sessions xe
ON (xe.address = xet.event_session_address)
WHERE xe.name = 'system_health'
イベント ファイルからセッション データを表示するには、Management Studio の拡張イベント ユーザー インターフェイスを使用します。 詳細については、「イベント セッション データの表示」を参照してください。
system_health セッションの復元
system_health セッションを削除した場合、クエリ エディターで u_tables.sql ファイルを実行することでそのセッションを復元できます。 このファイルは次のフォルダーにあります (C: は SQL Server プログラム ファイルのインストール先ドライブを表しています)。
C:\Program Files\Microsoft SQL Server\MSSQL11.<instanceid>\MSSQL\Install
セッションを復元したら、ALTER EVENT SESSION ステートメントを使用するか、オブジェクト エクスプ ローラーで [拡張イベント] ノードを使用して、セッションを開始する必要があります。 ただし、そのようにして開始しない場合でも、次に SQL Server サービスを再起動したときにセッションは自動的に開始されます。