sql基线建立-知识准备

  1. 1,SQLdiag is a successor of PSSdiag. SQL Nexus is a tool used to load and analyze performance data collected by SQLdiag
  2. 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.OUT

    sql是执行一次就结束了,若想多次执行,

    则调用spPollSP存储过程,定时执行。
    if object_id('dbo.spPollSP') IS NOT NULL –加在MSDiagProcs.sql内
    DROP PROC DBO.spPollSP
    GO
    PRINT ''

    RAISERROR('====建立存储过程dbo.spPollSP,以重复调用其他存储过程',0,1)
    WITH NOWAIT
    GO

    CREATE PROC dbo.spPollSP @spName sysname, @interval char(8)='00:01:00'
    AS
    DECLARE @SQL NVARCHAR(200)
    SET @SQL = 'EXEC ' +@spName + '; WAITFOR DELAY ''' + @interval + ''''
    WHILE 1=1
        EXEC(@SQL)
    GO

    sqldiag参数
    如: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%,表示要加内存了。