一个<MachineName>_<InstanceName>_sp_sqldiag_Shutdown.OUT文本文件,它包含如下数据:所有的Errorlogs、各种系统存储过程的输出(为了获取实例和数据库配置的细节)、不同的DMV(如sys.sysprocesses, sys.dm_exec_sessions, and sys.dm_os_wait_stats)和系统目录的输出,以获取额外的信息(实例的内存使用、SQL Server PerfMon计数器当前值的快照,SQL Server等待统计的快照,活动在SQL Server实例上的对话及需求的状态,以及相关的输入缓冲,SQL Server调度器的状态)。
下面举2个例子:
SQLDIAG /O D:\SQLDIAG_Data\ /G /B 20121225_00:01:00 /E +02:00:00 ------------告诉SQLdiag在20121225_00:01:00开始收集,2小时后终止,还指定了输出路径,/G会跳过连接检查,命令提示窗口会显示“SQLDIAG Begin time 20121225_00:01:00 specified. Waiting”,表明SQLdiag成功初始化。
SQLDIAG /O D:\SQLDIAG_Data\ /A DemoDiag /Q /I D:\SQLDIAG_Custom.xml---------------指示SQLdiag使用配置文件收集数据,使用文件压缩,应用程序名显示为DemoDiag,以静音模式运行,SQLdiag初始化成功时会提示如下信息:
DIAG$DemoDiag Collector version
IMPORTANT: Please wait until you see 'Collection started' before attempting to
reproduce your issue
SQLdiag控制台输出和冗长的日志可以在输出路径internal文件夹里找到,分别对应文件##console.log 和 ##SQLDIAG.LOG。当工具执行失败或没达到预期,这连个文件可以提供为何失败的额外洞察。不要使用命令提示窗口的关闭按钮停掉数据采集进程,这会引起Profiler跟踪或PerfMon文件成为孤行。Profiler跟踪可以使用命令sp_trace_setstatus来停止。 作为一个服务来使用SQLdiag
你可以使用/R参数将工具注册为一个服务,使用/U注销服务,使用/A将SQLdiag注册为有独特名称的服务。下面的命令将SQLdiag注册为一个名称为DIAG1的服务:SQLDIAG /R /A DIAG1
图11-2显示了注册为服务的属性,当使用/A参数时,服务名称有前缀DIAG$;如果仅使用/R,那么服务就被命名为SQLDIAG,如图11-3所示。
注意,服务注册是使用Log On账号为Local System完成的,你需要把服务账号改成有Windows管理员权限和SQL Server实例sysadmin权限的账号。接下来,就要决定指定什么参数,下面的例子中,SQLdiag正被注册为一个服务:
'C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqldiag.exe' /R /I C:\SQLDIAG_Data\SQLDIAG_Custom.XML /O 'C:\SQLDIAG_Data'
成功的服务注册会报告信息“SQLDIAG Service installed. Exiting”。你可以在Windows Application Event Log中看到SQLdiag服务的报告,如图11-4所示:
在Failover Cluster上配置和执行SQLdiag
当你使用Diag Manager为一个SQL Server FCI(failover cluster instance)配置一个数据采集包时,你需要记住如下要点:
指定SQL virtual server命名为Machine Name;
指定SQL Server实例名称,对于默认的FCI,输入MSSQLSERVER;
一旦配置了包,最好在SQL Server资源的当前拥有者所在的节点上执行。
当你在多个实例故障转移集群上按默认配置执行SQLdiag时,命令窗口会显示大量红色标记的错误。这是因为默认的配置文件SQLDIAG.XML没有改为从特定FCI上采集数据。SQLdiag会自动发现群集,并从每个虚拟机及实例上收集日志和配置信息。在命令窗口显示错误,是因为SQLdiag试图在每台虚拟机上连接每个实例,进而导致多次失败。这种情况下,要么用所需要额目标虚拟机名称来配置SQLDIAG.XML,要么忽略错误。通常可以通过日志文件(##SQLDIAG.LOG)来识别可以安全忽略的错误。一些可忽略的信息实际上有文本信息“you can usually safely ignore this”嵌入其中。