適用対象: SQL Server
Azure 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 秒であるあらゆるセッションの
callstack、sql_text、およびsession_id。 - ロックでの待機時間が > 30 秒であるあらゆるセッションの
callstack、sql_text、およびsession_id。 - プリエンプティブ待機のために長時間待機しているあらゆるセッションの
callstack、sql_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 Standard エディションと Enterprise エディションでは、イベント ファイルターゲットの上限が増えました。最大サイズは 100 MB、ファイル保持ポリシーは 10 ファイルです。
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 プログラム ファイルのインストール先ドライブを表し、MSSQLnn はSQL Server のメジャー バージョンを表しています。
C:\Program Files\Microsoft SQL Server\MSSQLnn.\<instanceid>\MSSQL\Install
セッションを復元したら、ALTER EVENT SESSION ステートメントを使用するか、オブジェクト エクスプローラーで [拡張イベント] ノードを使用して、セッションを開始する必要があります。 ただし、そのようにして開始しない場合でも、次に SQL Server サービスを再起動したときにセッションは自動的に開始されます。
Azure SQL の system_health セッション
Azure SQL Managed Instance で、event_file または ring_buffer ターゲットを右クリックし、オブジェクト エクスプローラーで [ターゲット データの表示] を選択することで、system_health セッション データを表示できます。
Azure SQL Database には組み込みの system_health 拡張イベント セッションはありませんが、sys.fn_xe_file_target_read_file() 関数を使用することで、自身で作成して Azure Storage に格納する拡張イベント セッションから読み取ることができます。 チュートリアルの例については、「Azure SQL Database における拡張イベントのイベント ファイル ターゲット コード」を参照してください。