PSSDIAG/SQLdiag Manager使你能够通过GUI配置数据采集,而不是费力地去修改XML配置文件。该工具的先决条件是.NET Frmework 2.0和Windows 2003 Server/XP或以上版本。工具路径在http://diagmanager.codeplex.com/。Diag Manager是一个32位的工具,默认的安装路径是:
安装完成后,你可以在All Programs=>PSSDIAG=>PSSDIAG Configuration Manager看到该程序。
使用Diag Manager配置SQLdiag Data Collection
启动该工具后,GUI会提供不同的配置选项,如图11-5所示:
图11-5中的箭头显示了不同的配置选项,使你能够轻松地定制你的数据采集。当你使用SQL Server authentication时,##SQLDIAG.log中会包含如下信息:
Password:
User prompted for password at runtime
SQLDIAG Initialization starting...
把跟踪过滤加入SQLdiag Configuration中
通常,把Profiler跟踪过滤添加到数据采集中,可以减少诊断数据的采集量。如果你要使用SQLdiag XML配置文件来收集Profiler跟踪,那么你需要遵循如下步骤:
下面的T-SQL可用来设置过滤SPID=52,TraceID=2的信息:
select * from sys.traces — To get the trace id EXEC sp_trace_setstatus 2,0 — Stops the trace but doesn't delete the trace definition from the server EXEC sp_trace_setfilter 2, 12, 0, 0, 52 — Add a filter for SPID = 52 EXEC sp_trace_setstatus 2,1 — Start the trace again select * from fn_trace_getfilterinfo(2) — Get information about the filters set for the trace
理解SQLdiag中的定制诊断(Understanding the Custom Diagnostics in SQLdiag)
定制诊断配置所使用的T-SQL、VBScript和DOS命令可在C:\Program Files\Microsoft\Pssdiag\CustomDiagnostics获取,如果是64位,就把Program Files换成Program Files (x86)。
一般的定制诊断
SQL Base定制采集器用于添加任务,这些任务用于每种类型的SQL Server数据采集。这种定制采集器运行优先于任何其他定制采集器任务。这种采集器也会收集注册表的基本配置信息、系统配置信息、PAE状态、及目标实例上活动的跟踪标记。所有输出文件都有前缀“SERVER_SQL_Base_*.”。
MSINFO定制采集器收集目标机器的msinfo32的输出。其输出文件都有前缀“SERVER_SQL_Best_Practices_*.”。
SQL 2008 Perf Stats
最常见的定制是收集SQL Server阻塞诊断,这种信息可以使用SQL 2008 Perf Stats定制诊断选项来收集。如果你想手动抓取SQL Perf Stats脚本,那么你需要得到最新的Perf Stats脚本,可以从http://sqlnexus.codeplex.com/wikipage?title=Sql2005PerfStatsScript&ProjectName=sqlnexus下载。下载后,解压缩PerfStatsScript2008R2.zip,你可以看到如图11-7所示的文件:
脚本SQL_2008_Perf_Stats_Snapshot.sql收集SQL Server实例最耗资源的查询、缺失索引的信息等。脚本SQL_2008_Perf_Stats.sql定期(WAITFOR DELAY 10秒)收集不同的DMV输出和阻塞信息。这两个脚本可以使用SQL Nexus工具导入到SQL Server数据库用于数据分析。这种定制诊断也会收集System Health Session Extended Event session的输出。
备份已经可用的诊断数据
SQL 2008 Backup MDW 定制采集器执行Management Data Warehouse数据库的备份。当你保存SQLdiag配置时,会弹出提示窗口,如图11-8所示:
SQL Dumps定制采集器收集所有mini-dump(SQLDumpXXXX.mdmp)文件,症状dump文本文件(SQLDump*.txt)和执行日志文件。采集器跳过任何大于10MB的dump文件,并将收集的dump限制在70MB。
分析服务定制采集器
Diag Manager为分析服务提供了4种不同类型的采集器,包括Analysis Services 2000、2005、2008和Shared。气筒2008和Shared可用于SQL Server 2012分析服务。如果你想查看这些采集器收集什么信息,可以右击采集器并选择Details选项,如图11-9所示:
特定功能的定制诊断(Feature-Specific Custom Diagnostics)
Diag Manager还提供了一些特定功能的定制采集器,它非常有助于排除SQL Server特定的场景或功能方面的故障。Database Mirroring定制采集器从不同的系统DMV和目录中收集数据库镜像配置和镜像数据库状态相关的信息。另外,数据库镜像采集器连接数据库镜像partner 和witness来收集运行SQLdiag的目标实例的配置数据。注意,还没有可用的新的定制采集器,来收集Alailability Groups的特定数据。然而,你可以在选项_MyCollectors下面编写自己的采集器。Full Text Search定制采集器收集启用全文检索的数据库的全文检索配置和全文目录细节。Linked Server Configuration定制采集器收集可用的链接服务器相关的信息。前面介绍的这些采集器要用到xp_cmdshell。
SQL 2005 tempdb Space和Latching定制采集器可用于解决tempdb竞争相关的问题。这个采集器在整个SQLdiag数据采集期间,使用T-SQL脚本收集tempdb使用和统计相关信息。该采集器使用如下DMV和系统目录来收集诊断信息:sys.dm_db_file_space_used、sys.dm_db_session_file_usage、sys.dm_db_task_space_usage、sys.sysprocesses、sys.dm_os_waiting_tasks。
SQL Blocking定制采集器在SQLdiag的初始化阶段启用跟踪标记1222,这确保死锁信息被写入SQL Server错误日志。这个采集器不会收集目标SQL Server实例上的阻塞信息。阻塞信息需要通过SQL 2008 Perf Stats定制采集器抓取。
SQL Memory Error定制采集器收集目标SQL Server实例上内存使用的诊断信息,它有助于解决SQL内存不足问题。
SQL Agent定制采集器收集目标SQL Server实例上所有SQL Server代理日志和MSDB数据库的备份。这会引起输出文件夹变得非常大,显著增加SQLdiag关闭阶段所要花费的时间,这与MSDB数据库的大小直接成比例。如果MSDB数据库很大,从MSDB数据库的表中收集相关的数据,或许是一个好主意。
捕捉扩展事件(Capturing Extended Events)
XEvents Waits定制采集器使你能够在目标SQL Server实例上配置扩展事件(XEvents)数据采集。默认情况下,该采集器有3个XEvent对话用于捕捉目标实例上页Latch等待相关的信息。你可以通过右击XEvent Waits定制采集器并点击Details来查看配置细节,如图11-10所示:
例如,假设你需要捕捉所有PAGEIOLATCH等待信息。SQL Server数据库引擎经历I/O子系统相关的等待时会遇到PAGEIOLATCH_*等待。通常这些等待类型的高等待时间意味着存储子系统相关的延迟。图11-11显示了最终配置的样子。这需要额外的两个定制事件:
SQL Server 2012 Management Studio提供了UI用于扩展事件。你可以使用UI来配置你的定制扩展事件对话。一旦对话配置了,就会出现在Sessions文件夹中,如图11-12所示。一旦你配置了需要的事件集,你就可以导出扩展事件会话的脚本,并使用所获得的的T-SQL脚本来建立你自己的XEvent采集。
添加你自己的定制采集器
如果前面讲的定制采集器不能满足你数据收集的需求,那么你可以使用_MyCollectors配置你自己的定制采集器。例如,你需要收集SQL Server默认数据文件夹的空间使用状况。下面的PowerShell脚本将会捕捉指定文件夹的磁盘空间使用情况:
$startFolder = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA' $colItems = (Get-ChildItem $startFolder | Measure-Object -property length -sum) '$startFolder -- ' + '{0:N2}' -f ($colItems.sum / 1MB) + ' MB' $colItems = (Get-ChildItem $startFolder -recurse | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object) foreach ($i in $colItems) { $subFolderItems = (Get-ChildItem $i.FullName | Measure-Object -property length -sum) $i.FullName + ' -- ' + '{0:N2}' -f ($subFolderItems.sum / 1MB) + ' MB' }
假设上面的代码保存为space.ps1。那么你右击_MyCollectors,并添加一个Utility任务,如图11-13所示:
当数据收集完成后,一个命名为<Machine Name>__MyCollectors_Get_Disk_Space_Shutdown_DiskSpace.OUT的文件会出现在输出文件夹。如果你使用Diag Manager保存设置之后查看配置文件,你会发现XML节点,该节点有定制采集器配置,如下面的代码所示:
<CustomDiagnostics> <CustomGroup name='_MyCollectors' enabled='true' /> <CustomTask enabled='true' groupname='_MyCollectors' taskname='Get Disk Space' type='Utility' point='Shutdown' wait='OnlyOnShutdown' cmd='powershell.exe -File ".\space.ps1" -NoLogo -NonInteractive > "PShell_DiskSpace.OUT" ' pollinginterval='0' /> </CustomDiagnostics>
注意,保存包配置之前,你必须把定制脚本(space.ps1)放到C:\Program Files\Microsoft\Pssdiag\CustomDiagnostics\_MyCollectors文件夹下面。
保存和使用SQLdiag配置
当你点击Save按钮时,会出现图如11-14所示的对话框,你可以改变路径。
当你点击“OK”时,会出现如图11-15所示的对话框:
默认情况下,产生的文件位于C:\Program Files\Microsoft\Pssdiag\Customer下面,文件名为pssd.cab。该文件为你配置的数据采集器存储了所有必要的支持文件,你可以把它复制到目标机器上。当你提取cabinet文件,你会发现一个pssdiag.cmd文件,它使用PSSDIAG.XML文件并调用SQLdiag可执行文件来收集数据。在你开始数据收集之前,你需要修改PSSDIAG.XML文件,把ssver值抽过10.50改为11,如下面的例子所示。这会指示SQLdiag工具收集SQL Server 2012实例的诊断数据:
<Instance name='MSSQLSERVER' windowsauth='true' ssver=”11” user=''>
现在,你就准备好了使用SQLdiag通过执行pssdiag.cmd来收集诊断数据。