SQLdiag是一个命令行实用工具,默认情况下,在C:\Program Files\Microsoft SQL Server\100\Tools\Binn目录下可用。
首先我们打开SQLdiag.exe所在目录,可以在命令行中通过以下命令获取工具所在位置:
WHERE SQLdiag
我的机器上安装有两个数据库实例,本篇文章使用SQL08R2实例
我们打开D:\Program Files\Microsoft SQL Server\100\Tools\Binn目录,双击SQLdiag.exe应用程序就能运行SQLDIAG工具,它会收集所有配置的诊断数据。待系统信息刷新完成后,我们可以按Ctrl+C组合键停止收集;如果我们在系统信息刷新完成前,按Ctrl+C组合键,SQLDIAG窗口提示需要等待进程完成,然后会自动关闭。
默认收集的信息保存在SQLDIAG文件夹下,主要包括以下信息:
1>internal文件夹,包含了由该工具创建的日志文件,以及一些其他文件
2>SQL Server默认跟踪、SQLDUMPER_ERRORLOG
3>一个文本文件的MSINFO32输出
4>机器名_实例名_sp_sqldiag_Shutdown.OUT文本文件,其中包含了下列数据:
4.1>所有错误日志
4.2>各种系统存储过程的输出,如sp_configure、sp_who、sp_lock、sp_helpdb从而获得SQL Server实例和数据库配置详细信息
4.3>各种动态管理视图和系统目录的输出,如sys.sysprocesses、sys.dm_exec_sessions和sys.dm_os_wait_stats,以获得以下额外的重要信息:
4.3.1>了解实例的内存使用情况
4.3.2>所有SQL Server PerfMon计数器的当前值的快照
4.3.3>SQL Server等待统计的快照
4.3.4>SQL Server实例中的会话和活跃请求的状态,以及相关联的输入缓冲区
4.3.5>SQL Server调度器的状态
这些收集信息是怎么来的呢?我们先了解SQLdiag配置文件的结构,当我们运行过SQLdiag.exe后,会在binn目录下创建SQLDiag.xml、SD_General.xml、SD_Detailed.xml三个配置文件,默认是使用SQLDiag.xml。让我们来查看SQLDiag.xml配置文件中的关键元素:
->Machine name的值是点号(.)表示数据收集将要从本地计算机发起
->Instance nam的值是星号(*)指定实用工具应收集安装在计算机上的所有实例中的数据
->EventlogCollector元素指定是否收集Windows事件日志
->PerfmonCollector元素指定是否收集PerfMon数据,pollinginterval和maxfilesize参数分别定义了两次连续取样的时间间隔和PerfMon的.blg文件的最大大小
->SqldiagCollector元素指定是否收集SQLdiag输出文件
->BlockingCollector元素启用跟踪标志1222,以便在SQL Server错误日志中捕获死锁的图形
->ProfilerCollector元素指定SQL Server Profiler事件是否被捕获,以及所有的Profiler跟踪配置设置
->CustomDiagnostics自定义诊断,可以扩展数据收集
图中我们可以看到EventlogCollector、PerfmonCollector、BlockingCollector、ProfilerCollector元素收集器是禁用的;SqldiagCollector、CustomDiagnostics中启用对MSINFO32、Default traces以及SQLDumper log的收集。因此我们在\SQLDIAG文件夹下得到这些信息。
命令行使用SQLdiag
SQLdiag详细语法请参考https://msdn.microsoft.com/zh-cn/library/ms162833.aspx
sqldiag
{ [/?] }
|
{ [/I configuration_file]
[/O output_folder_path]
[/P support_folder_path]
[/N output_folder_management_option]
[/M machine1 [ machine2 machineN]| @machinelistfile]
[/C file_compression_type]
[/B [+]start_time]
[/E [+]stop_time]
[/A SQLdiag_application_name]
[/T { tcp [ ,port ] | np | lpc } ]
[/Q] [/G] [/R] [/U] [/L] [/X] }
|
{ [START | STOP | STOP_ABORT] }
|
{ [START | STOP | STOP_ABORT] /A SQLdiag_application_name }
--切换到SQLdiag位置
cd D:\Program Files\Microsoft SQL Server\\Tools\Binn\
SQLdiag
--上面SQLdiag命令等效于
SQLdiag /I SQLDiag.XML /O SQLDIAG
--使用 /B 和 /E 参数指定开始和停止时间(24小时制YYYYMMDD_HH:MM:SS)
SQLdiag /B +:: /E +::
上面使用的是相对时间,SQLdiag 在等待 1 小时后开始收集信息,然后经过 3 小时的信息收集后停止并退出。SQLdiag会在相对于当前日期和时间的某个时间启动,并会在相对于指定的start_time的某个时间结束。如果指定的开始或结束日期和时间均为过去的时间,则SQLdiag将会强行更改开始日期,以使开始日期和时间为将来的时间。
SQLdiag /B +:: /E ::
如果当前时间为08:30,则在诊断收集操作实际开始之前,结束时间已经过去。因为当开始和结束日期为过去的时间时,SQLDiag 会自动将开始和结束日期调整为下一天,所以,该示例中的诊断收集将在当天的 09:00(已使用 + 指定的一个相对开始时间)开始,一直到第二天早上的 08:30 才结束。
--使用 /I 和 /O 参数指定配置文件和输出文件夹
SQLdiag /I F:\TroubleShooting\SQLdiag\input\SD_General.XML /O F:\TroubleShooting\SQLdiag\Output
SQLdiag注册为服务
如果希望使用 SQLdiag 长时间收集诊断数据,而在该时间段内可能需要注销运行 SQLdiag 的计算机,则可将其作为服务运行。将SQLdiag注册为服务时,默认服务名称为SQLDIAG:
SQLDIAG /R
使用下面任一命令启动该服务:
SQLDIAG START
NET START SQLDIAG
服务会使用默认的配置文件SQLDiag.XML,并将输出写入到SQLdiag 启动文件夹下名为 SQLDIAG 的子文件夹中。
使用下面任一命令停止该服务:
SQLDIAG STOP
NET STOP SQLDIAG
使用下面命令注销服务:
SQLDIAG /U
注册服务时,可以使用 /A 参数更改服务名称,还可以提供其他适当的参数:
cd D:\Program Files\Microsoft SQL Server\\Tools\Binn\
SQLdiag /R /A DIAG08R2 /I F:\TroubleShooting\SQLdiag\input\SQLDiagPerfStats_Detailed_Trace2008new.XML /O F:\TroubleShooting\SQLdiag\OUTPUT /E +::
一般情况下提供/I 和/O参数就行,如果提供了/E参数,在达到指定时间会自动停止服务。
使用下面任一命令启动该服务:
SQLDIAG START /A DIAG08R2
NET START DIAG$DIAG08R2
使用下面命令注销服务:
SQLDIAG /U /A DIAG08R2
切勿使用命令提示符窗口中的退出按钮关闭数据收集过程。这可能导致Profiler跟踪或PerfMon文件被孤立,加剧已存在的问题。检查这种场景的最简单方法是Profiler或PerfMon文件将继续增大,你将无法移动或删除文件。Profiler跟踪可以很容易地使用sp_trace_setstatus命令停止。然而,孤立的PerfMon文件是另一回事,大多数情况下,你只能通过重启SQL Server服务来纠正,当在生产环境中操作时,这是绝对不是一个好的方案。
注意,如果以服务启动数据收集,并且所使用的配置文件有使用自定义收集数据(比如SQL_2008_Perf_Stats.sql),记得将此类文件拷贝到SQLdiag启动文件夹中。
SQLdiag-初识的更多相关文章
-
Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
-
初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
-
python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
-
初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
-
UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
-
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
-
初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
-
初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
-
Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
-
MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
随机推荐
-
SQL Tuning 基础概述01 - Autotrace的设定
1.autotrace的设定 SQL> set autotrace Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [ST ...
-
RealSense开发-Session和SenseManager的几种创建方法
从Intel RealSense 的SDK文档对其架构(如图1所示)的始描述可知,Session是SDK应用的主控模块,必须在所有模块操作之前创建,并且在所有模块注销后最后注销.SenseManage ...
-
数字信号处理--FFT
FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因.另外,FFT可以将 ...
-
PHP基础14:$_REQUEST
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
-
[BS-11] 关于RGB/ARGB颜色相关知识
关于RGB/ARGB颜色相关知识 众所周知,自然界的颜色都是由红色R.绿色G.蓝色B三元色按不同比例混合而成,每种元色取值范围是0-255.iOS中图片的颜色分为2种:24位和32位. 1. 24位( ...
-
复制档案或目录 linux cp命令详解
cp (复制档案或目录) [root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[root@linux ~]# cp [options ...
-
【项目1-1】使用HTML5+CSS3绘制HTML5的logo
作为一个WEB小萌新,自学了有一段时间,总是感觉停滞不前.最近反思中,想到前贤一句话:书读百遍其义自见.说到底,还是项目做的少,如果做多了,想必自然会得心应手. 利用HTML5+CSS3绘制HTML5 ...
-
Netty SSL安全配置
Netty SSL安全配置 [TOC] 摘要 在研发蜂鸟部署平台的过程中,涉及到平台网关和前置agent的通信加密,虽然目前软件在内网中,但是由于蜂鸟平台和agent的特殊性,一旦被控制,部署的软件就 ...
-
iter 函数另类用法
它可以很简单地构造一个无限迭代器: ): print(i) #将无限打印出0 原来,如果iter有第二个参数,那么第一个参数必须是一个参数可以省略的可调用对象.int函数符合这种要求. 迭代什么时候停 ...
-
LeetCode算法题-Reach a Number(Java实现)
这是悦乐书的第310次更新,第331篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第179题(顺位题号是754).你站在无限数字线的0号位置.在目的地有个target.在 ...