フェールオーバー クラスター インスタンスの診断ログを表示して読む方法
適用対象: SQL Server
SQL Server Resource DLL のすべての重大なエラーと警告イベントが、Windows イベント ログに書き込まれます。 sp_server_diagnostics (Transact-SQL) システム ストアド プロシージャによってキャプチャされる SQL Server に固有の診断情報の実行ログは、SQL Server フェールオーバー クラスター診断ログ ファイル (SQLDIAG ログとも呼ばれます) に書き込まれます。
作業を開始する準備: ファイル名、ファイルの場所と形式、セキュリティ
診断ログ設定の構成: Transact-SQL の使用
始める前に
ファイル名、ファイルの場所と形式
既定では、SQLDIAG は、SQL Server インスタンス ディレクトリのローカル ログ フォルダーに保存されます。たとえば、AlwaysOn フェールオーバー クラスター インスタンス (FCI) の所有元ノードの "C\Program Files\Microsoft SQL Server\MSSQL13.<インスタンス名>\MSSQL\LOG" です。 各 SQLDIAG ログ ファイルのサイズは最大 100 MB に固定されています。 10 個のログ ファイルがコンピューターに格納された後、新しいログとして再利用されます。 ファイル名は MACHINE_SQLINSTANCE_SQLDIAG_0_xxxxxxxxxxxxxxxxx.xel
の形式で、最後の "xxxxxxxx" の部分は自動生成された番号となります。 たとえば、既定のインスタンスの場合、ファイル名は NODE1_MSSQLSERVER_SQLDIAG_0_133177967257760000.xel
となり、名前付きインスタンスの場合、ファイル名は NODE1_SQL2019INST_SQLDIAG_0_133177967257760000.xel
となります
ログには、拡張イベント ファイル形式が使用されます。 sys.fn_xe_file_target_read_file
システム関数は、拡張イベントによって作成されたファイルを読み込んでそれを結果セットとして表示するために使用できます。 行ごとに、XML 形式の 1 つのイベントが返されます。 詳しくは「sys.fn_xe_file_target_read_file (Transact-SQL)」をご覧ください。
セキュリティ
アクセス許可
fn_xe_file_target_read_fileを実行するには、VIEW SERVER STATE 権限が必要です。
SQL Server Management Studio を管理者として開きます。
SQL Server Management Studio を使用します
診断ログ ファイルを表示するには
[ファイル] メニューから、 [開く] 、 [ファイル] を選択し、表示する診断ログ ファイルを選択します。
イベントは、右ペインに行として表示されます。既定では、 名前と タイムスタンプ の 2 つの列だけが表示されます。
また、 [ExtendedEvents] メニューがアクティブ化されます。
他の列を表示するには、 [ExtendedEvents] メニューにアクセスし、 [列の選択] を選択します。
ダイアログ ボックスが開き、表示対象として選択できる列が表示されます。
[ExtendedEvents] メニューを使用し、 [フィルター] オプションを選択することによって、イベント データをフィルター選択したり並べ替えたりすることができます。
Transact-SQL を使用して診断ログ ファイルを表示する
診断ログ ファイルを表示するには
SQLDIAG ログ ファイル内のすべてのログ アイテムを表示するには、次のクエリを使用します。
SELECT
xml_data.value('(event/@name)[1]','varchar(max)') AS 'Name'
,xml_data.value('(event/@package)[1]','varchar(max)') AS 'Package'
,xml_data.value('(event/@timestamp)[1]','datetime') AS 'Time'
,xml_data.value('(event/data[@name=''state'']/value)[1]','int') AS 'State'
,xml_data.value('(event/data[@name=''state_desc'']/text)[1]','varchar(max)') AS 'State Description'
,xml_data.value('(event/data[@name=''failure_condition_level'']/value)[1]','int') AS 'Failure Conditions'
,xml_data.value('(event/data[@name=''node_name'']/value)[1]','varchar(max)') AS 'Node_Name'
,xml_data.value('(event/data[@name=''instancename'']/value)[1]','varchar(max)') AS 'Instance Name'
,xml_data.value('(event/data[@name=''creation time'']/value)[1]','datetime') AS 'Creation Time'
,xml_data.value('(event/data[@name=''component'']/value)[1]','varchar(max)') AS 'Component'
,xml_data.value('(event/data[@name=''data'']/value)[1]','varchar(max)') AS 'Data'
,xml_data.value('(event/data[@name=''info'']/value)[1]','varchar(max)') AS 'Info'
FROM
( SELECT object_name AS 'event'
,CONVERT(xml,event_data) AS 'xml_data'
FROM sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log\SQLNODE1_MSSQLSERVER_SQLDIAG_0_129936003752530000.xel',NULL,NULL,NULL)
)
AS XEventData
ORDER BY Time;
注意
WHERE 句を使用して、特定のコンポーネントまたは状態の結果にフィルターを適用することができます。
Transact-SQL を使用して診断ログのプロパティを構成する
診断ログのプロパティを構成するには
注意
この手順の例については、このセクションの後半の「 例 (Transact-SQL)」を参照してください。
データ定義言語 (DDL) ステートメント ALTER SERVER CONFIGURATION を使用すると、sp_server_diagnostics (Transact-SQL) プロシージャによってキャプチャされた診断データのログ記録を開始または停止し、SQLDIAG ログの構成パラメーター (ログ ファイルのロールオーバー回数、ログ ファイルのサイズ、ファイルの場所など) を設定できます。 構文の詳細については、「 Setting diagnostic log options」を参照してください。
例 (Transact-SQL)
診断ログ オプションを設定する
このセクションの例では、診断ログ オプションの値を設定する方法を示します。
A. 診断ログを開始する
次の例では、診断データのログ記録を開始します。
ALTER SERVER CONFIGURATION SET DIAGNOSTICS LOG ON;
B. 診断ログを停止する
次の例では、診断データのログ記録を停止します。
ALTER SERVER CONFIGURATION SET DIAGNOSTICS LOG OFF;
C. 診断ログの場所を指定する
次の例では、診断ログの場所を、指定されたファイル パスに設定します。
ALTER SERVER CONFIGURATION
SET DIAGNOSTICS LOG PATH = 'C:\logs';
D. 各診断ログの最大サイズを指定する
次の例では、各診断ログの最大サイズを 10 MB に設定します。
ALTER SERVER CONFIGURATION
SET DIAGNOSTICS LOG MAX_SIZE = 10 MB;
E. フェールオーバー クラスター インスタンス診断ログが有効になっているかどうかと現在の構成を確認する。
次の例では、dmv sys.dm_os_server_diagnostics_log_configurations を使用して現在の構成をチェックします。
SELECT is_enabled, [path], max_size, max_files
FROM sys.dm_os_server_diagnostics_log_configurations;