查看和读取故障转移群集实例诊断日志
适用于:SQL Server
将 SQL Server 资源 DLL 的所有严重错误和警告事件写入 Windows 事件日志。 正在运行的特定于 SQL Server 的诊断信息日志由 sp_server_diagnostics (Transact-SQL)系统存储过程捕获,并会写入 SQL Server 故障转移群集诊断日志文件(也称为 SQLDIAG 日志)中。
若要使用以下方法查看诊断日志: SQL Server Management Studio、Transact-SQL
若要使用以下方法配置诊断日志设置: Transact-SQL
开始之前
文件名、位置和格式
默认情况下,SQLDIAG 存储在 SQL Server 实例目录的本地 LOG 文件夹下,例如“C\Program Files\Microsoft SQL Server\MSSQL13.<InstanceName>\MSSQL\LOG”,该目录位于 Always On 故障转移群集实例 (FCI) 的自有节点上。 每个 SQLDIAG 日志文件的最大大小固定为 100 MB。 在被回收用于新日志之前,计算机上有十个这样的日志文件。 文件名采用以下格式 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 格式的事件。 有关详细信息,请参阅 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
查看诊断日志文件:
从“文件” 菜单,选择“打开文件” ,然后选择要查看的诊断日志文件。
事件在右窗格中显示为行,默认情况下,仅显示出 name和 timestamp 这两列。
这还会激活 “扩展事件” 菜单。
若要查看更多列,转到 “扩展事件” 菜单,然后选择 “选择列” 。
将打开一个显示出可用列的对话框,您可在其中选择要显示的列。
您可使用 “扩展事件” 菜单并选择 “筛选” 选项对事件数据进行筛选和排序。
使用 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;