SQLServer2008工具SQLServer探查器的详细解释

一、简要介绍SQL探查工具

SQL分析器是一个图形界面和一组系统存储过程,它们使用如下:

1。图形监视SQL Server查询;

2。在后台收集查询信息;

三.性能分析;

4。诊断死锁之类的问题。

5。调试T-SQL语句;

6。模拟重播SQL Server活动;

您还可以使用SQL分析器捕获SQL Server实例上执行的活动。

1、探查跟踪

从=所有程序=微软SQL Server 2008 =性能工具打开探查工具,也可以打开SQL Server服务器工具SQL Server探查器。

然后选择文件,跟踪打开连接窗口,选择要跟踪的服务器实例,然后连接。

U3000 U3000

如果有许多跟踪,可以提供跟踪名称来帮助以后进行分类。不同的跟踪模板有助于为不同目的构建跟踪。

打开跟踪属性窗口后,单击事件选择选项卡,为跟踪提供更详细的定义。

U3000 U3000

2。事件

An event represents the various activities that are performed in SQL Server.These activities can be simply classified as event classes, cursor events, lock events, stored procedure events, and T-SQL events are common event classes.

对于性能分析,它主要关注SQL Server上执行的各种活动的资源压力级别,资源压力主要包括以下内容:

SQL活动涉及到什么样的CPU使用使用了多少内存SQL活动执行过程中涉及了多少i/0操作特定查询执行的频率有多高查询面临什么样的错误和警告

下面是跟踪查询结束的事件:



事件类
事件
解释


存储过程
RPC:完成
RPC完成的事件



SP:完成
存储过程完成事件。



答:stmtcompleted
SQL语句在存储过程中完成事件。


T-SQL
SQL:batchcompleted
T-SQL批处理完成事件



SQL:stmtcompleted
一个T-SQL语句完成事件




RPC事件表示存储过程是使用远程过程调用(RPC)执行通过OLEDB命令机制。如果一个数据库应用程序执行存储过程使用T-SQL执行语句,然后存储过程将被改造成一个sql批而不是一个RPC。RPC请求通常比执行请求的速度,因为它绕过了很多语句的解析和工艺参数在SQL Server。

T-SQL包含一个或多个T-SQL语句。语句或T-SQL语句在存储过程中也分离。捕捉SP独立语句:stmtcompleted或SQL:stmtcompleted事件可以是一个昂贵的操作,根据不同的语句数。假设每个存储过程在系统中只有一个T-SQL语句。在这种情况下,报表,完成集是相当小的。现在假设在这个过程中有多个语句,这些过程中的一些使用其他语句来调用其他过程。收集所有这些额外的数据现在成为一个非常强大的系统负载,必须使用仔细地在生产机。

现在回到事件选择面板,只有事件,已选定将被显示。如果你想显示所有可用的事件,你只需要显示所有的事件添加一个框,跟踪事件列事件找到一个事件类的事件,然后单击复选框的左边;到删除不必要的事件,则事件选择框。

光分类中有很多词。

U3000 U3000

下面是一些与性能诊断相关的事件:



事件类
事件
解释


安全审计(安全审计)
审核登录(登录审计)
当用户连接到SQL服务器或断开连接时,记录到数据库的连接。


审核人(取消审核)


会议(届会)
existingconnection(现有的连接)
表示在跟踪开始时连接到SQL Server的所有用户。


游标(光标)
cursorimplicitconversion(光标暗示转换)
指示创建的游标的类型与请求的类型不同。


错误和警告(错误和警告)
注意(注意)
指示请求中断是由客户端撤销查询或数据库连接失败引起的。


异常(异常)
这表明SQL Server异常。


执行警告(执行警告)
指示查询或存储过程执行过程中的警告。


HashWarning(Hashi警告)
它表明哈希操作是错误的。


丢失列统计(列统计损失)
用于指示优化器所需的确定处理策略的类统计的统计损失。


缺少连接谓词(连接断言丢失)
指示在两个表中不执行连接断言时执行查询。


排序警告(排序警告)
它表明在SELECT等查询中执行排序操作没有合适的内存。


锁(锁)
锁定:死锁(死锁)
标志着僵局的出现。


锁:死锁链(死锁锁链)
显示死锁的查询链。


锁定:超时(锁定超时)
表明锁已超出其超时参数,这是由setlock_timeout timeout_perious(MS)命令


存储过程(存储过程)
SP:编译(编译)
这表明,用于存储过程的执行计划必须重新编译,因为执行计划不存在,强制重新编译是需要的,或现有执行计划不能重复使用。




开始(开始)

答:stmtstarting(语句开始)

一个SP的开始:stmtstarting存储过程和存储过程中,SQL语句分别。它们可用于查询标识启动列表因为操作导致的关注事件的发生到结束。


事务(事物)
sqltransaction(SQL事务)
提供数据库事务的信息,包括事务开始/结束时间、事务持久性等。




3、事件列

事件由不同的特征(称为数据列)表示,数据列显示事件的失败特性,如事件的类别、事件的SQL语句、事件的资源开销和事件的来源。



数据列
解释


EventClass(事件类)
事件类型,如SQL:statementcompleted


文本数据
用于事件的SQL语句,如从人中选择*


中央处理器
一个事件的CPU开销(以MS),如SELECT语句,其中CPU = 100表示该语句执行100ms



为事件执行的逻辑读操作的数量。例如SELECT语句,读取= 800表示该语句需要800个逻辑读操作



事件执行的逻辑写操作的数目。


持续时间
事件的执行时间(ms)


SPID
事件的SQL Server进程标识符


开始时间
事件开始的时间




以上是常见的数据列,也有一些不太常用的数据列:

二进制数据(二进制数据)integerdata(整数)eventsubclass(事件类)databaseid(数据库标识符)ObjectId(对象标识符)indexid(索引标识符)transactionid(事务标识符)错误(错误)结束(结束)

列数据可以改到适合自己喜欢的风格。若要控制列数据放置,请单击组织列按钮,然后打开以下对话框。您可以单击上下按钮修改列的位置,并将列移动到组中,这意味着它将成为一个完整的列。

U3000 U3000

4、列过滤

除了为探查器跟踪定义事件和数据列之外,还可以定义各种过滤条件。这些条件有助于减少跟踪的输出,这通常是一个好主意。



事件
过滤条件示例
使用


应用程序的名字(应用程序名称)
不喜欢:SQL分析器
筛选器分析器生成的事件。这是默认行为。


DatabaseID(数据库标识符)
等于:
过滤事件由一个特定的数据库。数据库ID:选择db_ic('northwind)


持续时间(持续时间)
大于或等于:2
为了进行性能分析,我们经常捕获并跟踪大量的工作负载。在大型跟踪中,许多事件日志具有比持久性更小的持久性周期。


读取(读取操作数)
大于或等于2
过滤少读操作


SPID


等于:

定位由特定数据库用户发送的查询




下面是设置筛选器列的方法:

U3000 U3000

5。跟踪模板

SQL Server探查器可以使用自定义事件、数据列和筛选器创建跟踪模板,然后定义新跟踪,然后重用跟踪模板以捕获跟踪。定义新跟踪模板的过程与定义新跟踪类似,步骤如下:

创建一个新的跟踪。像以前一样定义事件、数据列和过滤器。跟踪定义从文件=保存为跟踪模板,保存为菜单。

SQL Server分析器将自动添加一个新模板到它的模板列表中。

新的模板:

U3000 U3000

保存模板:

U3000 U3000

观:

U3000 U3000

6。跟踪数据

定义跟踪后,点击运行按钮将开始捕获事件并显示在屏幕上,你可以看到一系列的滚动事件,我们可以调用SQL的电视屏幕上看到系统的操作,如DVD播放器的更多或更少的控制,你可以使用工具栏上的按钮暂停,开始和停止跟踪,你可以修改它在录音室和悬浮。

一旦SQL Server活动捕获完成后,跟踪输出可以被保存为一个跟踪文件或跟踪表,保存到跟踪文件的跟踪输出是土生土长的格式,可以打开分析器分析SQL查询,跟踪输出保存为一个表,和探查器还可以用于分析SQL查询的跟踪表的SELECT语句。

特定的操作是文件跟踪表,选择要保存的数据库和表,然后执行像普通表这样的SQL查询。

二、跟踪自动化

Profiler GUI简化Profiler跟踪收集。不幸的是,这种简单性是有代价的。事件捕获的事件探查器工具在内存缓冲区,输入界面是通过network.gui反馈依赖于网络,网络流量可以降低系统的速度,导致缓冲区被填充。这将影响服务器性能的影响程度较低。此外,当缓冲区满,服务器将开始丢弃事件,避免对服务器的性能造成严重影响。

1。使用GUI捕获跟踪

脚本跟踪可以在两种方法,两种或GUI中创建,最容易满足脚本所有需求的方法是使用探查工具的GUI,它需要以下步骤:

定义一个跟踪;点击文件= =口=跟踪脚本的定义;我们必须选择目标服务器,SQL Server2005 / 2008;没有文件命名并保存。

这些非行走将生成所有跟踪并输出到文件的所有脚本命令。

使用管理器手动启动新跟踪:

打开文件;与系统相关的名称和路径替换insertfilenamehere;执行脚本,它将返回一个结果集的单柱与TraceId;

您可以自动化脚本执行通过SQL代理,甚至使用sqlcmd.exe程序从命令行运行脚本。不管用哪种方法,脚本将开始跟踪。如果跟踪停止时间不确定,有必要使用traceid停止跟踪手动。

2。使用存储过程捕获跟踪

查看最后一节中定义的脚本,您将看到在特定的序列栏中使用的一系列命令:

sp_trace_create:创建一个跟踪定义;sp_trace_setevent:添加事件和事件的痕迹;sp_trace_setfilter:将过滤器应用于微量;

一旦SQL跟踪直到跟踪已停止。因为SQL跟踪运行作为一个后台进程,管理工作室会话不需要保持开放。您可以使用SQL Server自带的函数fn_trace_getinfo确定运行轨迹,如下:

复制代码代码如下所示:

SELECT * FROM::fn_trace_getinfo(默认);



输出图:

U3000 U3000

在fn_trace_getinfo函数的输出,不同的数字代表traceid对SQL Server跟踪活动的数量。

第三柱(值)指示跟踪正在运行(值= 1)或停止(值= 0)。可以通过存储过程sp_trace_setstatus执行停止特定的痕迹,如traceid = 1,如下图所示:

复制代码代码如下所示:

执行sp_trace_setstatus 1,0;



在跟踪之后停止,其定义必须关闭并从服务器上删除,如下所示:sp_trace_setstatus

复制代码代码如下所示:

执行sp_trace_setstatus 1,2;



要验证的痕迹是成功的fn_trace_getinfo功能停止,重新执行该函数的输出不包含traceid。

此技术创建的跟踪文件的格式与探查器创建的跟踪文件相同,因此,可以用与分析器创建的文件相同的方式对跟踪文件进行分析。

使用前一节中概述的存储过程来捕获SQL跟踪,避免与探查器GUI相关联的开销,但也比探查器工具管理提供更多的灵活性来计划SQL跟踪。

三。结合跟踪和性能监视器输出

如果性能监控自动化的文件的捕获,探查器数据自动捕获到一个文件。他们盖的同一时间,他们可以一起使用SQL Profiler GUI。确保开始时间和结束时间字段的数据进行跟踪,并遵循以下步骤:

打开跟踪文件(当然,如果您保存为跟踪文件);单击文件导入性能数据;选择导入的性能监视器文件。

执行上述操作将打开以下对话框,允许您选择一个性能监视器计数器。



在选择计数器,你想控制,点击OK按钮打开分析器和性能监控数据结合在一起。现在,你可以开始使用跟踪数据和性能监视器数据。如果时间是在顶部窗口选择,它将一个红色的线在性能监视器中显示的数据事件的时间。相反,你可以点击性能监测数据表明,当时的事件将被选中。这些职能工作,可定期调整过程中发现瓶颈和压力点,并确定具体的查询,因为这些压力。

四、SQL分析器使用点

SQL分析器使用以下建议:

限制事件和数据列数,丢弃用于性能分析的启动事件,限制输出大小的跟踪,避免在线数据列排序,并运行proflier远程。

1。限制事件和数据列

当跟踪的SQL查询,可以确定SQL活动应通过过滤事件和数据列抓获。更多的事件的选择导致了大量的跟踪开销。数据列不添加太多的开销,因为它们只有一个事件类的特征,因此,它是要知道每个所需的跟踪事件,根据需要选择事件的重要原因。

尽量减少捕获事件的数量,以避免SQL Server浪费宝贵的资源带宽来生成所有事件。应该小心地执行诸如锁和执行计划之类的捕获事件,因为这些事件使得跟踪输出非常大,并降低了SQL Server的性能。

滤波器可以分为两个阶段:预过滤器,由SQL Server执行和后置滤波器是由用户执行。预滤波是获取SQL Server活动在线阶段和预滤波提供了各种泄漏:

由于SQL Server生成的时间有限,减少了跟踪输出的大小,简化了过滤操作,降低了SQL Server的性能。首先,要捕捉的事件更少。

预唯一的缺点是它有可能失去一些在深入分析所需要的重要信息。

2。丢弃用于性能分析的启动事件

用于性能分析的信息围绕一个查询的资源开销。启动事件像SP:stmtstarting不提供这方面的信息,因为只有活动完成后才能计算出我/ O量、CPU负载和查询的时间。所以,当跟踪慢查询执行性能分析,你不需要捕捉启动事件。该信息由相应的完成事件提供。

捕获启动事件是什么情况当某些SQL查询由于错误或预期事件被频繁发现而无法完成执行时,应该会捕获启动事件。注意事件通常意味着用户在查询中途取消了查询或查询超时,可能是因为查询运行太长了。

三.限制跟踪输出的大小。

除了预过滤器的事件和数据列,其他过滤条件也限制跟踪输出的大小。同样尺寸的限制可能会失去在关注系统的整体国家利益的事件。然而,如果你专注于开销查询过滤器是有用的。

通过过滤器,可以过滤执行事件= 2或逻辑读取量= 100的查询,因为过低的查询基本上不需要优化。

4。避免联机数据列排序

在性能分析,它一般是在不同的数据列进行排序,如时间、CPU读取,确定相应的数据查询的最大数量。如果离线排序,可以减少探查活动,必须与SQL Server进行交互时,通过排序的SQL跟踪输出排序方法如下:

捕获和跟踪,不进行任何排序或分组;将跟踪输出保存为跟踪文件;打开跟踪文件,根据需要在特定数据列上排序或输出文件。

5。远程运行剖面

运行测试工具直接在生产服务器上一般不是一个好办法。仪有一个大的用户界面,因此最好是在其他机器上运行它。类似的系统监测,探查不应通过终端服务会话,因为该工具的主要部分仍然是在服务器运行。当跟踪输出直接收集到一个文件,它是保存在本地的文件,由仪。这仍然是资源密集型的操作比使用分析器作为服务器端通过追踪的系统存储过程。使用系统存储过程仍然是最好的选择。

6。限制某些事件的使用

某些事件的开销大于其他事件的开销。由于生成的查询的特性,完成事件的语句的开销可能非常大。我们需要谨慎使用,特别是在已经处于压力之下的系统中。我们必须在事件如计划XML事件表现谨慎使用:计划XML,XML查询的性能:显示计划编制绩效计划XML编译。虽然这些事件可能是有用的,不使用他们的生产机器。

五。没有探查器的查询性能度量

设置跟踪可以收集大量数据供将来使用,但此集合可能代价高昂,必须等待结果。

如果我们想要捕获系统的性能测量立即,尤其是对查询性能的测量,动态管理视图sys.dm_exec_query_stats需要正式。跟踪仍然是一个更好的工具,如果你需要查询的运行及其个人开销的历史。但是,如果你只需要了解当时最长的查询时间或物理读操作,你可以从sys.dm_exec_query_stats得到这些信息。

因为sys.dm_exec_query_stats只是一个视图,你可以简单的查询,在查询计划统计服务器上的信息。




描述


plan_handle
引用执行计划的指针。


creation_time
计划要创建的时间


last_execution时间
查询最后一次使用的计划时间


execution_count
计划使用的次数


total_worker_time
从计划的CPU时间的创建


total_logical_reads
生成器计划使用的读取操作数


total_logical_writes
生成器计划使用的写入操作数。


query_hash
一种二进制散列,可用于识别具有相似逻辑的查询。


query_plan_hash
两jinzhihash可以用于识别类似的逻辑计划




为了过滤信息sys.dm_exec_query_stats归来,我们需要将它连接到其他的动态管理功能,如sys.dm_exec_sql_text,显示相关查询的文本,并sys.dm_query_plan显示查询的执行计划。一旦你连接到其他的DMF,您可以限制欲望过滤数据库或过程。