SQL Profiler识别长时间查询

在很多情况下需要监控长时间运行查询的结果,在一些时候数据库用户可能会抱怨执行查询的响应时间并不一致,有时快点,有时慢点,当查询慢的时候就会导致应用程序超时。通过SQL Server Profiler可以监控哪个查询的时间最长或哪个查询时间最短。使用SQL Server Profiler可以监控负荷中的数据库长时间运行的查询,使用SQL Profiler识别长时间查询包括四个步骤:确定监控、设置模板、跟踪、分析与调校。

1) 确定监控

在监控之前需要确定两个问题:第一确定事件类;第二设置筛选器;

事件类必须与待分析的问题匹配,查询执行的时间显示在Duration列,通常使用的事件类如下:

Ø Stored Procedures-RPC:Completed:在完成远程过程调用时发生,该事件可以捕获客户端调用的存储过程。

Ø Stored Procedures-SP:StmtCompleted:指示存储过程中的 Transact-SQL 语句已完成执行。

Ø TSQL- BatchCompleted:表示存储过程内部的 Transact-SQL 语句完成时发生。

筛选器设置主要需要确定使用哪能些筛选器以及确定哪些阀值,目的是在跟踪运行时更好的收集准确数据。如何确定筛选器中的阀值是设置筛选器的重点,通常可以使用这种方法,首先测试系统处于小负荷状态下,各查询所消耗的时间,将所消耗的时间记录下来,假设查询消耗的时间绝对大部分都大于2秒,那么可以将该值定义为阀值,这样可以屏蔽查询时间少于2秒的查询,可以更好的收集数据。

2) 设置模板

第一步:启动SQL Profiler,单击【文件】菜单,在下拉菜单中选择【新建跟踪】选项,弹出跟踪属性对话框。

第二步:在跟踪属性对话框中选择“常规”标签页,单击【使用模板】下拉框,选择“Standard(默认值)”选项。

第三步:在跟踪属性对话框中选择“事件选择”标签页,选择“Stored Procedures-RPC:Completed”、“Stored Procedures-SP:StmtCompleted”和“TSQL- BatchCompleted”事件类,如图所示。

SQL Profiler识别长时间查询

第四步:设置阀值,单击【列筛选器】按钮,选择“Duration”选项,并设置其阀值大于50毫秒,如图所示。

SQL Profiler识别长时间查询

第五步:单击【组织列】按钮,选择“Duration”选项,单击【向上】按钮,将其置顶,即在SQL Profiler显示界面上第一列显示为“Duration”的值,如图所示。

SQL Profiler识别长时间查询

3) 跟踪

实例:首先创建一个表,代码如下:

CREATE TABLE test

(

num varchar(255),

soc int,

id int

)

然后向该表中添加100万条记录,代码如下:

DECLARE @max AS INT, @rc AS INT;

SET @max = 1000000;

SET @rc = 1;

WHILE @rc <= @max

BEGIN

INSERT INTO TEST values('2012001',90,@rc);

SET @rc = @rc + 1;

END

接着启动跟踪程序,再打开一个查询窗口,执行一个查询语句,代码如下:

select * from test

SQL Profiler跟踪结果如图所示。

SQL Profiler识别长时间查询

“Duration”列显示查询的时间,依次从小到大升序排序,一般首先分析时间长的查询语句。

4) 分析与调校

一般分析最后一行的数据,因为最后一行的数据是模拟脚本查询的语句,因些在该实例中先分析倒数第二行的数据,以分析倒数第二行数据为例,分析的工具一般使用SQL Server 2005 Database Tuning Advisor(DTA)。

在SQL Server Management Studio中新建一个查询窗口,输入如下查询语句:

select * from test

然后单击右键,选择“在数据库引擎优化顾问中分析查询”,如图所示。

SQL Profiler识别长时间查询

之后弹出“Database Engine Tuning Advisor”对话框,如图所示。

SQL Profiler识别长时间查询

单击“优化选项”标签页,可以对优化项进行详细的设置,之后单击【开始分析】按钮,分析结束后显示分析结果,分析可以得知,DTA建议为test表创建一个索引。

注意:如果调用DTA来分析查询,需要使用SQL Server身份认证在SQL Server Management Studio中连接SQL Server,这样在DTA管理界面单击“开始分析”之前必须重新连接到一个数据库实例,并选择需要调校的数据库,如果使用Windows身份验证,那么在分析时就会报错,因为它不会要求重新连接到一个数据库实例。


分享到:


相關文章: