[转]sql 事件探查器方案

本文介绍了如何使用SQL事件探查器来监控SQL Server实例的性能、调试T-SQL语句及存储过程、识别执行慢的查询等。通过具体案例展示了如何设置跟踪,捕获与特定事件类相关的事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sql 事件探查器方案

[注:用SQL的事件探查器 在高峰期监视一下,是好的习惯]

SQL 事件探查器


在解决 SQL Server 7.0 或更高版本的应用程序性能问题时,SQL 事件探查器是一种非常有效的工具。SQL 事件探查器可以使您轻松地捕获在正常负载下服务器上发生的所有事件,并提供有关这些事件的信息。将 SQL 事件探查器与 Microsoft Windows NT 性能监视器和一些简单的查询配合使用来确定是否发生阻塞,可为您提供解决大多数性能问题所必需的信息。


监视对象

1. 设置 SQL 事件探查器以捕获跟踪。为此,请按照下列步骤操作:

a. 打开 SQL 事件探查器。
b. 在“工具”菜单上,单击“选项”。
c. 确保选中了所有事件类所有数据列选项。
d. 单击“确定”。
e. 创建一个新的跟踪。
f. 在“文件”菜单上,指向“新建”,然后单击“跟踪”。
g. 在“常规”选项卡上,指定跟踪名称和捕获数据的文件。
h. 在“事件”选项卡上,将下列事件类型添加到跟踪:

标题要添加的事件说明
CursorsCursorPrepare此事件表示已经使用 ODBC、OLEDB 或 DB-Library 在 SQL 语句上准备了光标。
Error and WarningMissing Column Statistics此事件表示可能对“优化器”有用的列统计信息不可用。文本列显示丢失了统计信息的多个列。此事件连同 Misc:Auto-UpdateStats 事件表示已触发自动创建统计信息选项。
Misc.Attention此事件表示客户端发送了一个注意信号。
Misc.Auto-UpdateStats此事件表示已触发自动更新统计信息选项。
Misc.Exec Prepared SQL此事件表示 ODBC、OLE DB 或 DB-Library 执行了一个(或多个)以前准备的 Transact-SQL 语句。
Misc.Execution Plan此事件表示执行了 Transact-SQL 语句的计划树。
Misc.Prepare SQL此事件表示 ODBC、OLE DB 或 DB-Library 应用程序准备了要使用的一个(或多个)Transact-SQL 语句。
Misc.Unprepare SQL此事件表示 ODBC、OLE DB 或 DB-Library 应用程序未准备要使用的一个(或多个)Transact-SQL 语句。
SessionsConnect此事件表示已创建一个新的连接。
SessionsDisconnect此事件表示客户端已断开连接。
SessionsExisting Connection此事件表示启动 SQL 事件探查器跟踪时存在一个连接。
Stored ProceduresSP:Completed此事件表示存储过程已完成执行。
Stored ProceduresSP:Recompile此事件表示存储过程在执行期间被重新编译。
Stored ProceduresSP:Starting此事件表示存储过程已经开始执行。
Stored ProceduresSP:StmtCompleted此事件表示存储过程中的语句已完成执行。
TSQL:SQL:BatchCompleted此事件表示 Transact-SQL 批处理已完成。文本列显示已执行的语句。
TSQL:SQL:StmtCompleted此事件表示 Transact-SQL 语句已完成。文本列显示已执行的语句。
TSQL:RPC:Completed此事件表示远程过程调用 (RPC) 已完成。
i. 如果应用程序收到超时错误、停止响应(挂起)或遇到使有问题的语句永远不能结束运行的其他事件,那么还应包括下列事件:

TSQL:SQL:BatchStarting此事件表示 Transact-SQL 批处理的开始。文本列显示正在执行的语句。
TSQL:SQL:StmtStarting此事件表示 Transact-SQL 语句的开始。文本列显示正在执行的语句。
TSQL:RPC:Starting此事件表示远程过程调用 (RPC) 的开始。
Stored ProceduresSP:StmtStarting此事件表示存储过程中的语句正在开始执行。


这将帮助您确保可以看见超时发生时正在执行的语句
j. 数据列选项卡上,确保包含下面的列:

对于 SQL Server 2000

开始时间

结束时间

LoginSid

SPID

事件类

文本数据

整数数据

二进制数据

持续时间

CPU

读取

写入

应用程序名称

NT 用户名

DB 用户名


对于 SQL Server 7.0

开始时间

结束时间

连接 ID

SPID

事件类

文本

整数数据

二进制数据

持续时间

CPU

读取

写入

应用程序名称

NT 用户名

SQL 用户名

有关使用 SQL 事件探查器的信息,请参阅 SQL Server 7.0 和 SQL Server 2000 联机丛书。

         

SQL事件探查器使用介绍 作者: 朱前邦




SQL 事件探查器是SQL Server提供的一个图形工具,通过该工具主要可以实现如下功能:

l 监视 SQL Server 实例的性能。

2 调试 Transact-SQL 语句和存储过程。

3 识别执行慢的查询。

4 在工程开发阶段,通过单步执行语句测试 SQL 语句和存储过程,以确认代码按预期运行。

5 通过捕获生产系统中的事件并在测试系统中重播它们来解决 SQL Server 中的问题。这对测试和调试很有用,并使得用户可以不受干扰地继续使用生产系统。

6 审核和复查在 SQL Server 实例中发生的活动。这使得安全管理员得以复查任何审核事件,包括登录尝试的成功与失败,以及访问语句和对象的权限成功与失败。

需要注意的是,运行 SQL 事件探查器时,必须确保系统至少有10 MB 的可用空间,否则SQL 事件探查器的所有功能都将停止。

一、建立跟踪

从“开始”菜单中的“Microsoft SQL Server”菜单中选择“事件探查器”即可进入事件探查器主界面。我们可通过点击工具条上的“新跟踪”按钮或选择“文件”菜单下“新建”中的“跟踪”来开始一个新跟踪。此时,系统会提示我们输入要跟踪的数据库所在的服务器名、对应得账号和密码。这儿需要特别说明的是执行跟踪的账号必须是“system admin”角色成员。点“确定”后,系统便弹出如下对话框(图一).



在该对话框的上部有四个选项卡,默认是“常规”选项,在该选项中我们可以设定跟踪名和跟踪模版,作为初学者我们这儿使用默认设置。

单击“事件”选项卡进入图二,在图二中我们可以看到有很多供监视的事件。一般情况下,使用默认的事件即可,除非真的需要,不建议选择所有的事件来监视。



在接下来的“数据列”选项中(图三),我们可以选择所捕获的每个事件所需要保存的信息,同样系统提供的默认信息基本上就够用了。如果系统只有一个用户,象ApplicationName,LoginName这些信息甚至都可以从默认的选项中移除。

二、准备测试代码

为了演示SQL 事件探查器的功能,我先用C#写一个小的Windows应用程序。在这个小程序的主界面上我们放一个文本框和两个按钮,点击“显示”按钮时,应用程序会将Customers表中CustomerID 为“ALFKI”的公司名显示在文本框中。点“保存”按钮时,应用程序则会保存修改后的新公司名,下面就是该小程序的主要代码:

//载入信息

private void btnLoad_Click(object sender, System.EventArgs e)

{

//数据库连接信息,数据库是微软提供的Northwind数据库,服务器、用户名和密码视实际情况修改

string strCon="server=james;database=Northwind;Uid=sa;Pwd=";

SqlConnection cn = new SqlConnection(strCon);

SqlCommand cmd = new SqlCommand("SELECT CompanyName FROM Customers WHERE CustomerID='ALFKI'", cn);

cn.Open();

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())

{

//在文本框中显示公司名

txtCustomer.Text=dr.GetString(0).Trim();

}

}

...................................................







通常情况下,使用   SQL   事件探查器可以:    
   
  1.查找执行最差的查询  
     
  例如,可以创建跟踪来捕获与   TSQL   和   Stored   Procedure   事件类(尤其是   RPC:Completed   和   SQL:BatchCompleted)相关的事件。在这个跟踪内包含所有数据列,按   Duration   分组并指定事件准则。例如,如果指定事件的   Duration   至少为   1,000   毫秒,则可以跟踪中排除运行时间短的事件。根据需要可以增大   Duration   的最小值。如果想一次只监视一个数据库,为   Database   ID   事件准则指定一个值。  
   
  2.识别死锁原因    
  例如,可以创建一个跟踪来捕获与   TSQL   和   Stored   Procedure   事件类(RPC:Starting   和   SQL:BatchStarting)以及   Locks   事件类(Lock:Deadlock   和   Lock:Deadlock   Chain)相关的事件。在这个跟踪内包括所有数据列并按   Event   Class   分组。如果想一次只监视一个数据库,为   Database   ID   事件准则指定一个值。  
   
      若要查看死锁所涉及的连接,执行下列操作之一:  
   
  打开包含捕获的数据的跟踪,按   ClientProcessID   将数据分组并展开死锁所涉及的两个连接。  
   
   
  将捕获的数据保存到一个跟踪文件,然后打开这个跟踪文件两次,使其显示在两个单独的   SQL   事件探查器窗口内。按   ClientProcessID   将捕获的数据分组,然后展开死锁所涉及的进程   ID;每个死锁连接都在一个单独的窗口内。平铺窗口以查看导致死锁的事件。    
   
  3.监视存储过程的性能    
   
  例如,可以创建一个跟踪来捕获与   Stored   Procedure   事件类(SP:Completed、SP:Starting、SP:StmtCompleted   和   SP:StmtStarting)和   TSQL   事件类(SQL:BatchStarting   和   SQL:BatchCompleted)相关的事件。在这个跟踪内包含所有数据列并按   ClientProcessID   分组。如果想一次只监视一个数据库,为   Database   ID   事件准则指定一个值。同样,如果想一次只监视一个存储过程,为   Object   ID   事件准则指定一个值。  
   
  4.审核   Microsoft®   SQL   Server™   活动    
   
  可以使用   SQL   事件探查器审核   SQL   Server   中的活动。例如,如果安全管理员需要随时了解谁登录到了服务器,可以创建   SQL   事件探查器跟踪,提供已登录到服务器或从服务器注销的用户的完整视图。之后,可出于法律目的使用这些信息记录活动,和出于技术目的使用这些信息跟踪违反安全策略的行为。  
   
  若要设置   SQL   事件探查器跟踪来跟踪已登录到服务器或从服务器注销的用户,请执行下列操作:    
   
  创建跟踪并选择   Audit   Login   Event。  
   
   
  若要返回适当的信息,请指定下列数据列:    
  EventClass(默认情况下选定)  
   
  EventSubClass  
   
  LoginSID  
   
  LoginName  
   
  监视每个用户的   Transact-SQL   活动。    
  可以创建跟踪来捕获与   Sessions   事件类、ExistingConnection   和   TSQL   事件类相关的事件。将所有数据列包含在此跟踪内,不要指定任何事件准则,并按   DBUserName   将捕获的事件分组。
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值