system_health セッションを使用する

適用対象: SQL ServerAzure SQL Managed Instance

system_health セッションは、既定では SQL Server および Azure SQL Managed Instance に含まれている拡張イベント セッションです。 このセッションは、データベース エンジンの起動時に自動的に開始されます。実行中にパフォーマンスのオーバーヘッドに大きな影響が及ぶことはありません。 データベース エンジンのパフォーマンスの問題をトラブルシューティングするのに役立つシステム データを収集します。

重要

この system_health セッションを停止、変更、または削除しないことをお勧めします。 system_health セッション設定に加えられた変更は、今後の製品の更新プログラムによって上書きされる可能性があります。

このセッションでは、次の情報を収集します。

  • 重大度 > = 20 であるエラーが発生したすべてのセッションの sql_text および session_id
  • メモリ関連のエラーが発生したすべてのセッションの sql_text および session_id。 エラーには、17803、701、802、8645、8651、8657、8902 などがあります。
  • 応答していないスケジューラの問題の記録 これらはエラー 17883 として SQL Server のエラー ログに表示されます。
  • デッドロック グラフなど、検出された任意のデッドロック。
  • ラッチ (またはその他の関心があるリソース) での待機時間が > 15 秒であるすべてのセッションの callstacksql_text、および session_id
  • ロックでの待機時間が > 30 秒であるすべてのセッションの callstacksql_text、および session_id
  • プリエンプティブ待機のために長時間待機しているすべてのセッションの callstacksql_text、および session_id。 待機時間は、待機の種類によって異なります。 プリエンプティブ待機とは、SQL Server が外部の API 呼び出しを待機している状態です。
  • CLR の割り当てと仮想の割り当ての失敗に対する callstack および session_id
  • メモリ ブローカー、スケジューラ モニター、メモリ ノード OOM、セキュリティ、接続性に関するリング バッファー イベント。
  • sp_server_diagnostics からの結果のシステム コンポーネント。
  • によって収集された scheduler_monitor_system_health_ring_buffer_recorded インスタンスの正常性。
  • CLR 割り当ての失敗。
  • connectivity_ring_buffer_recorded を使用した 接続エラー。
  • security_error_ring_buffer_recorded を使用した セキュリティ エラー。

Note

デッドロックについての詳細は、「デッドロック ガイド」を参照してください。 SQL エラー メッセージの詳細については、「データベース エンジンのイベントとエラー」を参照してください。

system_health セッションデータを参照してください。

このセッションでは、リング バッファー ターゲットとイベントファイルを使用して、データを格納します。 イベント ファイル ターゲットは 5 MB の最大サイズ、4 つのファイルのファイルのリテンション ポリシーで構成されます。

SQL Server Management Studio で利用できる拡張イベント ユーザー インターフェイスを使ってリング バッファー ターゲットからセッション データを表示するには、「SQL Server での拡張イベントからのターゲット データの詳細表示」の「ライブ データの監視」を参照してください。

Transact-SQL を使ってリング バッファー ターゲットからセッション データを表示するには、次のクエリを使用します。

SELECT CAST(xet.target_data as xml) AS target_data
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'

イベント ファイルからセッション データを表示するには、SQL Server Management Studio の拡張イベント イベント ビューアーユーザーUIを使用します。 詳細については、「SQL Server Management Studio でイベント データを表示する」を参照してください。

system_health セッションを復元する

system_health セッションを削除した場合は、u_tables.sql スクリプトを実行して復元できます。 このファイルは次のフォルダーにあります (C: は SQL Server プログラム ファイルのインストール先ドライブを表し、SQL Server の MSSQLnn メジャー バージョンを表します)。

C:\Program Files\Microsoft SQL Server\MSSQLnn.\<instanceid>\MSSQL\Install

セッションを復元したら、ALTER EVENT SESSION ステートメントを使用するか、オブジェクト エクスプローラーで [拡張イベント] ノードを使用して、セッションを開始する必要があります。 ただし、そのようにして開始しない場合でも、次に SQL Server サービスを再起動したときにセッションは自動的に開始されます。

Azure SQL の system_health セッション

Azure SQL Managed Instance では、system_health セッション データを表示するには、オブジェクト エクスプローラーでいずれかのターゲット event_file または ring_buffer を右クリックし、[ターゲット データの表示] を選択します。

Azure SQL Database には組み込みの system_health 拡張イベント セッションはありませんが、自分で作成して Azure Storage に格納する拡張イベント セッションからを読み取るために sys.fn_xe_file_target_read_file() 関数を使用できます。 チュートリアルの例については、「Azure SQL Database の拡張イベントのイベント ファイル ターゲット コード」を確認してください。