sql 事件探查器方案

分享到:

2014-12-27 16:46:55

通常情况下,使用 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%26amp;reg; SQL Server%26amp;#8482; 活动

可以使用 SQL 事件探查器审核 SQL Server 中的活动。例如,如果安全管理员需要随时了解谁登录到了服务器,可以创建 SQL 事件探查器跟踪,提供已登录到服务器或从服务器注销的用户的完整视图。之后,可出于法律目的使用这些信息记录活动,和出于技术目的使用这些信息跟踪违反安全策略的行为。

若要设置 SQL 事件探查器跟踪来跟踪已登录到服务器或从服务器注销的用户,请执行下列操作:

创建跟踪并选择 Audit Login Event。


若要返回适当的信息,请指定下列数据列:
EventClass(默认情况下选定)

EventSubClass

LoginSID

LoginName

监视每个用户的 Transact-SQL 活动。
可以创建跟踪来捕获与 Sessions 事件类、ExistingConnection 和 TSQL 事件类相关的事件。将所有数据列包含在此跟踪内,不要指定任何事件准则,并按 DBUserName 将捕获的事件分组。

 

 

使用 SQL Server Profiler 的第一步是确定监视 SQL Server 实例的原因。本主题讨论使用 SQL Server Profiler 收集跟踪信息的典型方案。

使用 SQL Server Profiler 的典型方案包括:

  • 查找执行情况最差的查询。
    例如,可以创建一个捕获与 TSQLStored Procedure 事件类(RPC:CompletedSQL:BatchCompleted)相关的事件的跟踪。在此跟踪中包括所有数据列,按 Duration 分组并指定事件准则。例如,如果指定事件的 Duration 必须至少为 10000 微秒,则可以从跟踪中清除持续时间较短的事件。可以根据需要增大 Duration 的最小值。如果希望一次仅监视一个数据库,请指定 Database ID 事件标准的值。
  • 确定死锁的原因。
    例如,可以创建一个捕获与 TSQLStored Procedure 事件类(RPC:StartingSQL:BatchStarting)和 Locks 事件类(Deadlock graphLock:DeadlockLock:Deadlock Chain)相关的事件的跟踪。在此跟踪中包括所有数据列并按 Event Class 分组。如果希望一次仅监视一个数据库,请指定 Database ID 事件标准的值。如果指定 Deadlock graph 事件类,SQL Server Profiler 将生成图形化表示形式的死锁。有关详细信息,请参阅使用 SQL Server Profiler 分析死锁
    若要查看死锁中涉及的连接,请执行下列操作之一:
    • 打开包含捕获的数据的跟踪,按 ClientProcessID 对数据进行分组并展开死锁中涉及的两个连接。
    • 将捕获的数据保存到跟踪文件中,然后两次打开此跟踪文件,使其出现在两个单独的 SQL Server Profiler 窗口中。按 ClientProcessID 对捕获的数据进行分组,然后展开死锁中涉及的客户端进程 ID;每个死锁的连接将出现在一个单独的窗口中。平铺这两个窗口以查看导致死锁的事件。如果要将特定死锁图形数据保存到文件,请右键单击死锁事件并选择“提取事件数据”。
  • 监视存储过程性能。
    例如,可以创建一个捕获与 Stored Procedure 事件类(SP:CompletedSP:StartingSP:StmtCompletedSP:StmtStarting)和 TSQL 事件类(SQL:BatchStartingSQL:BatchCompleted)相关的事件的跟踪。在此跟踪中包括所有必要的数据列并按 ClientProcessID 分组。如果希望一次只监视一个数据库,请使用数据库 ID 筛选器为“数据库 ID”事件标准指定一个值。同样,如果希望一次只监视一个存储过程,请使用对象 ID 筛选器为“对象 ID”事件标准指定一个值。
  • 审核 SQL Server 活动。
    例如,如果安全管理员经常需要了解登录到服务器的用户,则 SQL Server Profiler 跟踪可以提供登录到服务器或从服务器注销的用户的完整记录。而且,此信息可用于法律或技术目的。
    创建跟踪,并选择 Audit Login 事件。若要返回适当的信息,请指定下列数据列:EventClass(默认选择)、EventSubClassLoginSIDLoginName
  • 监视每个用户的 Transact-SQL 活动。
    可以创建一个捕获与 SessionsExistingConnectionTSQL 事件类相关的事件的跟踪。在此跟踪中包括所有数据列,不指定任何事件准则并按 DBUserName 对捕获的事件进行分组。
  • 收集用于压力测试的事件典型示例。
    SQL Server Profiler 提供一个预定义的 TSQL_Replay 模板,此模板可用于迭代优化,例如基准测试。
  • 收集通过数据库引擎 优化顾问优化物理数据库设计的事件示例。
    SQL Server Profiler 提供一个预定义的优化模板,此模板收集跟踪输出中的相应 Transact-SQL 事件以用作数据库引擎 优化顾问中的工作负荷。

 

SQL 事件探查器

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

 

监视对象

<SCRIPT type=text/java script>loadTOCNode(2, 'summary'); 1. 设置 SQL 事件探查器以捕获跟踪。为此,请按照下列步骤操作:

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

标题 要添加的事件 说明
Cursors CursorPrepare 此事件表示已经使用 ODBC、OLEDB 或 DB-Library 在 SQL 语句上准备了光标。
Error and Warning Missing 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 语句。
Sessions Connect 此事件表示已创建一个新的连接。
Sessions Disconnect 此事件表示客户端已断开连接。
Sessions Existing Connection 此事件表示启动 SQL 事件探查器跟踪时存在一个连接。
Stored Procedures SP:Completed 此事件表示存储过程已完成执行。
Stored Procedures SP:Recompile 此事件表示存储过程在执行期间被重新编译。
Stored Procedures SP:Starting 此事件表示存储过程已经开始执行。
Stored Procedures SP: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 Procedures SP: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=&quot;server=james;database=Northwind;Uid=sa;Pwd=&quot;;

SqlConnection cn = new SqlConnection(strCon);

SqlCommand cmd = new SqlCommand(&quot;SELECT CompanyName FROM Customers WHERE CustomerID='ALFKI'&quot;, 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&reg;   SQL   Server&#8482;   活动    
   
  可以使用   SQL   事件探查器审核   SQL   Server   中的活动。例如,如果安全管理员需要随时了解谁登录到了服务器,可以创建   SQL   事件探查器跟踪,提供已登录到服务器或从服务器注销的用户的完整视图。之后,可出于法律目的使用这些信息记录活动,和出于技术目的使用这些信息跟踪违反安全策略的行为。  
   
  若要设置   SQL   事件探查器跟踪来跟踪已登录到服务器或从服务器注销的用户,请执行下列操作:    
   
  创建跟踪并选择   Audit   Login   Event。  
   
   
  若要返回适当的信息,请指定下列数据列:    
  EventClass(默认情况下选定)  
   
  EventSubClass  
   
  LoginSID  
   
  LoginName  
   
  监视每个用户的   Transact-SQL   活动。    
  可以创建跟踪来捕获与   Sessions   事件类、ExistingConnection   和   TSQL   事件类相关的事件。将所有数据列包含在此跟踪内,不要指定任何事件准则,并按   DBUserName   将捕获的事件分组。
 

声明:此篇为用友服务中心文章,转载请标明出处链接:
  • 相关文章
  • 热门下载
  • 数据修复
  • 热门标签
合作伙伴