- 1,SQLdiag is a successor of PSSdiag. SQL Nexus is a tool used to load and analyze performance data collected by SQLdiag
- SQLdiag作用是收集以下信息。
- Windows服务器的软硬件信息(通过MSInfo32公用程序提取)
- Windows性能计数器,事件记录
- SQLSERVER服务器Profiler跟踪
- SQLSERVER错误记录
- SQLSERVER封锁信息
- SQLSERVER分配信息
- 自定义信息。
- 可用pssdiag图形化配置:http://diagmanager.codeplex.com/
3,SQLdiag信息
- 存在于\Program Files\Microsoft SQL Server\90\Tools\Binn目录下
- 日志文件放在\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLdiag目录下。
- 指定配置文件产生地址:sqldiag -PC:\SQLdiag,会产生以下配置文件
- MSDiagProcs.sql:对sqlserver实例进行的初始化操作,多是在Tempdb系统库上建立对象。
- SQLDiag.XML:默认读取的配置文件,提供标准的数据搜集,包含Perfmon,SqlServer错误处理,设置状态等。
- SD_Detailed.XML:设置SQLDiag.XML更详细的信息
- SD_General.XML:设置SQLDiag.XML精简的信息
- SQLDiag_Schema.XSD:用来编写,修改,验证既有的XML配置文件
- 4,SQLDiag.XML配置。各节点中,EventlogCollector:收集系统信息,PerfmonCollector收集监控系统,Instances收集SQLSERVER信息
- 默认的Instances的事件是各跟踪事件信息,对应事件可在sys.trace_events中查看。
- sqldiag的唯一缺点是不会定期查询系统视图,
所以若加上PerfStatsScript.sql监视脚本输出,就比较全面了。
PerfStatsScript:说明:建立两个存储过程,
1)sp_perf_stats09:–列出最耗时的请求及找到阻塞源头,#tmp_requests:查询当前活动的请求,任务,等基本信息–#tmp_requests2:据#tmp_requests查询当前的活动事务,阻塞的进程
2)sp_perf_stats_infrequent09:收集sqlserver的性能计数器,如内存管理,CLR等sys.dm_os_performance_counters,CPU运行情况,I/O情况
每10分钟执行一次sp_perf_stats09,每小时执行一次sp_perf_stats_infrequent09定制执行SQL
<CustomTask enabled="true" groupname="ByronSP" taskname="ReusePlanPercentage" type="TSQL_Command" point="Startup" wait="OnlyOnShutdown" cmd="exec tempdb.dbo.GetTable" />
输出结果在:
SQLDI\taskname_Startup.OUTsql是执行一次就结束了,若想多次执行,
则调用spPollSP存储过程,定时执行。
if object_id(‘dbo.spPollSP‘) IS NOT NULL –加在MSDiagProcs.sql内
DROP PROC DBO.spPollSP
GO
PRINT ‘‘RAISERROR(‘====建立存储过程dbo.spPollSP,以重复调用其他存储过程‘,0,1)
WITH NOWAIT
GOCREATE PROC dbo.spPollSP @spName sysname, @interval char(8)=‘00:01:00‘
AS
DECLARE @SQL NVARCHAR(200)
SET @SQL = ‘EXEC ‘ [email protected] + ‘; WAITFOR DELAY ‘‘‘ + @interval + ‘‘‘‘
WHILE 1=1
EXEC(@SQL)
GOsqldiag参数
如:sqldiag -Pc:\sqldiag /B +00:01:00 /E +00:10:00 /n 1 /L
1分钟后开始执行,10分钟后停止。连续运行以服务运行,直到10:19分时停止
sqldiag -P"C:\sqldiag" -E20120508_10:23:00 -N2 -R
net start sqldiag卸载:
net stop sqldiag
sqldiag -u日志文件转成csv文件:
relog SQLDIAG.BLG -f csv -o "C:\sqldiag\SQLDIAG_00001\a
.csv"relog sqldiag.blg -q -o counter.txt — 查看记数器
/I configuration_file
设置 SQLdiag 要使用的配置文件。默认情况下,/I 设置为 SQLDiag.Xml。/O output_folder_path
将 SQLdiag 输出重定向到指定文件夹。如果未指定 /O 选项,则 SQLdiag 输出结果将会写入 SQLdiag 启动文件夹下名为 SQLDIAG 的子文件夹中。如果 SQLDIAG 文件夹不存在,则 SQLdiag 将会尝试创建该文件夹。/P support_folder_path
设置支持文件夹路径。默认情况下,将 /P 设置存放 SQLdiag 可执行文件的文件夹。/B [+]start_time
按照以下格式指定开始收集诊断数据的日期和时间:按照以下格式指定开始收集诊断数据的日期和时间:
YYYYMMDD_HH:MM:SS
使用 + 并且不带日期(只使用 HH:MM:SS),可以指定相对于当前日期和时间的时间。例如,如果指定 /B +02:00:00,则 SQLdiag 将会在 2 小时后开始收集信息。
不要在 + 和指定的 start_time 之间插入空格。
/E [+]stop_time
按照以下格式指定停止收集诊断数据的日期和时间:使用 /B +02:00:00 /E +03:00:00 指定开始时间和结束时间,则 SQLdiag 将会在 2 小时后开始收集信息,经过 3 小时信息收集后停止收集并退出。
/R
将 SQLdiag 注册为服务。您将 SQLdiag 注册为服务时指定的所有命令行参数,都将留到以后用来运行该服务。/U
撤消 SQLdiag 服务注册。/N output_folder_management_option ,如:sqldiag /N 1
设置 SQLdiag 在其启动时,是覆盖还是重命名输出文件夹。可用选项包括:1 = 覆盖输出文件夹(默认)
2 = 当 SQLdiag 启动时,将输出文件夹重命名为 SQLDIAG_00001、SQLDIAG_00002 等等。重命名当前输出文件夹之后,SQLdiag 将输出写入默认输出文件夹 SQLDIAG。
- /L:连续运行sqldiag
5,一般设置提纲为:记录两小时,每4秒记录一次,记录一天,每30秒记录一次,记录5天,每180秒记录一次,以免影响系统性能,且能放映系统持久变化。
- 要收集的perfmon信息在PerfmonCounters下面增加:
1,内存
<PerfmonObject name="\Memory" enabled="true">
<PerfmonCounter name="\Available MBytes" enabled="true" />
<PerfmonCounter name="\Page Faults/sec" enabled="true" />
<PerfmonCounter name="\Pages/sec" enabled="true" />
</PerfmonObject>
Pages/sec:磁盘进行读取或写入的频率,平均值应低于20
Available MBytes:低于物理内在的10%,就会性能影响,100M以上是严重性能问题
2,磁盘
<PerfmonObject name="\PhysicalDisk(*)" enabled="true">
<PerfmonCounter name="\% Disk Time" enabled="true" />
<PerfmonCounter name="\Avg. Disk Queue Length" enabled="true" />
<PerfmonCounter name="\Current Disk Queue Length" enabled="true" />
</PerfmonObject>
% Disk Time:磁盘读取/写入操作的时间百分比,若平均值>70%,说明硬盘有问题,可进一步查询是否是内存不足导致,当使用RAID设备时,此值有可能>100%,此时要看PhysicalDisk:Avg.Disk Queue Length计数器的值,此值越低越好。
Current Disk Queue Length:正在等待磁盘访问的请求,小于2,越低越好。
3,处理器
<PerfmonObject name="\Processor(*)" enabled="true">
<PerfmonCounter name="\% Processor Time" enabled="true" />
<PerfmonCounter name="\% Privileged Time" enabled="true" />
</PerfmonObject>
% Processor Time:持续值应低于80
Privileged Time:执行Windows系统核心命令的时间百分比,持续小于10
4,内存文件
<PerfmonObject name="\Paging File(*)" enabled="false">
<PerfmonCounter name="\% Usage" enabled="false" />
</PerfmonObject>
% Usage:比率值高于70%,表示要加内存了。