事件探查器讲解.ppt
- 文档编号:18716463
- 上传时间:2023-10-17
- 格式:PPT
- 页数:66
- 大小:3.39MB
事件探查器讲解.ppt
《事件探查器讲解.ppt》由会员分享,可在线阅读,更多相关《事件探查器讲解.ppt(66页珍藏版)》请在冰点文库上搜索。
SQLSERVER事件探查器初探,U8产品支持部XX号工程师XXXX年XX月XX日,简单的SQL语句select,查询语句语法:
select列名|表达式from表|视图where条件实例:
表authors中有三个字段name(姓名字符型),sex(性别字符型),age(年龄整型),现在要查询姓名是张三的记录,那么查询语句为:
Select*fromauthorswherename=张三说明:
*表示所有字段,字符型字段要用单引号括起来,简单的sql语句update,更新语句语法:
update表名set字段=值where条件实例:
以authors表为例,现在要将张三的名字改为李四,那么语句为:
Updateauthorssetname=李四wherename=张三,简单的sql语句insert,插入语句语法:
insertinto表名(字段名,)values(字段值,)实例:
在表authors中插入一条记录,姓名为王二,性别为男,年龄为28,那么语句为:
Insertintoauthors(name,sex,age)values(王二,男,28),简单的sql语句delete,删除语句语法:
deletefrom表名where条件实例:
删除表authors中姓名为张三的记录,那么删除语句为:
Deletefromauthorswherename=张三,整体概念,SQL事件探查器是图形工具,使我们得以监视MicrosoftSQLServer实例中的事件。
可以捕获有关每个事件的数据并将其保存到文件或SQLServer表中供以后分析。
例如,我们可以对生产环境进行监视,了解执行速度太慢而妨碍性能的存储过程;了解到哪些SQL语句或者存储过程产生了异常错误导致程序中断等等。
我们可以使用SQL事件探查器只监视感兴趣的事件,什么情况下如何决定那些事件是我们感兴趣的,我们将会在后面提到。
要运行事件探查器,系统所在硬盘可用空间至少要大于等于10M,否则跟踪将会自动停止。
如果跟踪变得太大,可以基于需要的信息进行筛选,以便只收集事件数据的子集。
监视太多事件类会增加服务器和监视进程的开销,并且可能导致跟踪文件或跟踪表变得很大,尤其是在进行长时间监视时。
SQL事件探查器术语,模板模板定义想要使用SQL事件探查器监视的每个事件的准则。
每次启动事件探查器监视时都会让您选择一个模板来进行跟踪,默认是一个标准模板(SQLProfilerStandard)。
里面有事先定义好的的事件和数据列,没有筛选。
我们可以创建一个模板以指定使用哪些事件、数据列和筛选。
然后可以保存该模板,并用当前的模板设置启动跟踪。
捕获的跟踪数据基于模板中指定的选项。
模板不执行且必须用.tdf扩展名保存到文件。
我们也可以创建一个自己的模板,并设置成每次启动自动运行该模板,具体操作如下:
点“工具”菜单下的“选项”,弹出如下窗口(请注意红色区域):
模板,模板,【使用下列默认跟踪模板】:
您可以在这里选择一个默认的跟踪模板,这样每次新建一个跟踪时就以该模板为默认模板;【进行连接后立即启动跟踪】:
选择该选项,连接上对应的服务器后立即运行默认跟踪模板进行跟踪;【显示】页签下您可以设置所使用的跟踪窗体显示的字体、字体的大小,这里就不在赘述。
模板,我们还可以保存模板以减少我们的重复劳动。
保存模板涉及保存跟踪定义,比如指定的数据列、事件和筛选。
跟踪定义包括事件类、数据列、事件准则(筛选)和所有其它用来创建跟踪的属性(捕获的事件数据除外)。
使用SQL事件探查器创建的模板保存在运行SQL事件探查器的计算机上的文件中。
如果经常监视SQLServer,则保存模板以便分析性能。
模板每次捕获相同的事件数据,并使用相同的跟踪定义监视同一事件,因而无须在每次创建跟踪时都定义事件类和数据列。
另外,可以将模板提供给其他用户,供其监视特定的SQLServer事件。
例如,支持提供商可提供给客户一个模板。
客户使用这个模板捕获所需的事件数据,然后将这些数据发送给支持提供商供其分析。
我们可以在“文件”菜单下“新建”下的“跟踪模板”里建立一个新的模板,选择好对应的事件类和数据列后将其保存,建议按应用场景取名以便是使用,如“存储过程跟踪模板”、“错误定位跟踪模板”等。
模板,同样我们也可以修改保存在运行SQL事件探查器的本地计算机上的文件中的模板以及从文件导出的模板。
如果没有记住当初用于创建跟踪的模板,或希望以后再次运行同一跟踪,则可能需要从跟踪文件导出模板。
修改模板属性(如事件类和数据列)的方法与当初设置该属性的方法相同。
可以添加和删除事件类和数据列,也可以对筛选进行更改。
修改模板后,以同一名称保存它将重写原来的模板。
当处理现有跟踪时,可以查看属性,但不能修改。
警告:
使用相同的名称保存跟踪文件将重写原来的跟踪文件,这将导致任何当初捕获的事件或已删除或筛选的数据列丢失,SQL事件探查器术语,跟踪跟踪基于选定的事件、数据列和筛选捕获数据。
例如,可创建模板监视异常错误。
为此,应选择跟踪Exception事件类以及Error、State和Severity数据列,这些都是为了使跟踪结果提供有意义的数据而需收集的。
保存模板后,便可将其作为跟踪运行,并且可收集关于服务器中发生的任何Exception事件的数据。
可保存此跟踪数据,然后稍后重播或立即用于分析。
SQL事件探查器术语,筛选当创建跟踪或模板时,可以定义筛选由事件收集的数据的准则。
如果跟踪变得太大,可以基于想要的信息进行筛选,以便只收集事件数据的子集。
如果没有设置筛选,跟踪输出中将返回选定事件类的所有事件。
例如,可以将跟踪中的MicrosoftWindows2000用户名限制为特定用户,以将输出数据减少到感兴趣的那些用户。
也可以只跟踪对特定数据库的操作的信息,这样在多帐套的服务器上就可以更快的收集到我们感兴趣的信息。
SQL事件探查器术语,事件事件是在MicrosoftSQLServer引擎中生成的操作。
例如:
登录连接、失败和断开。
Transact-SQLSELECT、INSERT、UPDATE和DELETE语句。
远程过程调用(RPC)批处理状态。
存储过程的开始或结束。
SQL批处理的开始或结束。
存储过程内的语句的开始或结束。
写入SQLServer错误日志的错误。
在数据库对象上获取或释放的锁。
打开的游标。
安全权限检查。
由事件生成的所有数据显示在单个行中的跟踪内。
该行包含详细描述事件的数据列,称为事件类。
SQL事件探查器术语,事件类事件类是描述由服务器生成的事件的列。
事件类确定收集的数据类型,因此并不是所有数据列都适用于所有事件类。
事件类示例包括:
SQL:
BatchCompleted,表示已完成SQL批处理。
运行客户端的计算机的名称。
受事件影响的对象ID(如表名)。
发出语句的用户的SQLServer名称。
正在执行的Transact-SQL语句文本或存储过程文本。
事件开始和结束的时间。
SQL事件探查器键盘快捷方式,快捷键,SQL事件探查器方案,通常情况下,我们使用SQL事件探查器可以:
1、查找执行最差的查询:
例如,可以创建跟踪来捕获与TSQL和StoredProcedure事件类(尤其是RPC:
Completed和SQL:
BatchCompleted)相关的事件。
在这个跟踪内包含所有数据列,按Duration分组并指定事件准则。
例如,如果指定事件的Duration至少为1,000毫秒,则可以跟踪中排除运行时间短的事件。
根据需要可以增大Duration的最小值。
如果想一次只监视一个数据库,为DatabaseID事件准则指定一个值。
单这个用途对我们来说不是主要的,对测试和开发人员这应该是常需要用到的。
SQL事件探查器方案,2、监视存储过程的性能:
例如,可以创建一个跟踪来捕获与StoredProcedure事件类(SP:
Completed、SP:
Starting、SP:
StmtCompleted和SP:
StmtStarting)和TSQL事件类(SQL:
BatchStarting和SQL:
BatchCompleted)相关的事件。
在这个跟踪内包含所有数据列并按ClientProcessID分组。
如果想一次只监视一个数据库,为DatabaseID事件准则指定一个值。
同样,如果想一次只监视一个存储过程,为ObjectID事件准则指定一个值。
同样,这个用途对于我们也不是常用的。
SQL事件探查器方案,3、审核MicrosoftSQLServer活动可以使用SQL事件探查器审核SQLServer中的活动。
例如,如果安全管理员需要随时了解谁登录到了服务器,可以创建SQL事件探查器跟踪,提供已登录到服务器或从服务器注销的用户的完整视图。
之后,可出于法律目的使用这些信息记录活动,和出于技术目的使用这些信息跟踪违反安全策略的行为。
4、监视每个用户的Transact-SQL活动可以创建跟踪来捕获与Sessions事件类、ExistingConnection和TSQL事件类相关的事件。
将所有数据列包含在此跟踪内,不要指定任何事件准则,并按DBUserName将捕获的事件分组。
这两项内容对系统管理员比较实用。
SQL事件探查器方案,5、分析程序业务流程和数据库内数据流向可以创建一个跟踪来捕获与StoredProcedure事件类(SP:
Completed、SP:
Starting、SP:
StmtCompleted和SP:
StmtStarting)和TSQL事件类(SQL:
BatchStarting和SQL:
BatchCompleted)相关的事件。
用以分析程序的流程以及数据库内的表间关系。
这是一个对我们非常有用的用途,他可以帮助我们理解程序的业务流程,数据流等。
我们在学习一个新的产品,新的模块、新的功能时,可以利用这个功能来了解其使用到那些表,涉及到那些表。
甚至我们可以知道这些表的各个字段的具体涵义是什么。
经常接到询问某张单据的某项内容具体对应那张表的那个字段具体的电话。
其实您只要在界面上制作一张单据,然后在保存前运行一个跟踪,然后分析跟踪里面的插入语句就可以清楚的知道以上信息了。
SQL事件探查器方案,6、定位出错语句使用事件类错误和警告下的ERRORLOG、EVENTLOG、EXCEPTION等相关事件,可以在程序发生异常的时候快速定位具体位置。
这个方案对我们处理数据,特别是处理一些由于数据库里存放的数据由于某种原因导致有异常数据时引发的一些错误有意想不到的功效。
SQL事件探查器监控事件分类,常用的事件分类:
TSQL事件类,TSQL事件类是一个常用的事件,其对应的常用事件解释如下:
TSQL事件对应数据列:
存储过程事件类,存储过程事件类是执行存储过程所产生的事件的集合,也是一个常用的事件类,其对应的常用事件解释如下:
存储过程事件类,SP:
Starting-表明存储过程已被启动的时间,其监视到的结果是整个存储过程的调用,结果形式如:
execSa_MoveSaleDetailSa_TempSaleDetail_GCCXL0,其中Sa_MoveSaleDetail为存储过程名称;exec为SQL的一个命令,可以理解为执行;Sa_TempSaleDetail_GCCXL0,传递给该存储过程的参数;SP:
Completed、RPC:
Starting、RPC:
Completed返回的结果都与此类似。
存储过程事件类,SP:
StmtStarting-表明正在启动存储过程内的某语句的时间,其监视到的结果是一个存储过程内部的一条语句的执行,结果形式如:
-Sa_MoveSaleDetailifltrim(rtrim(chrwhere1)=newReport_ParameterFromTempTable其中:
-Sa_MoveSaleDetail指明该语句所属的存储过程;ifltrim(rtrim(chrwhere1)=newReport_ParameterFromTempTable指的是执行的具体的SQL语句;SP:
StmtCompleted返回的结果与此类似。
存储过程事件类,以上两部分的事件您可以理解为整体和局部的概念,也就是说一个是跟踪整体的结果,一个是跟踪明细的结果。
如果是希望了解程序的流程,可以跟踪整体,知道其使用了那些存储过程即可。
然后再具体查看该存储过程,了解其内部处理流程;此处插入说明一点,要查看某个存储过程的具体内容,可以直接到企业管理器里找到该存储过程双击打开;也可以在查询分析器里利用系统存储过程SP_HelpText来查看,如前面说到的存储过程Sa_MoveSaleDetail,我们可以在查询分析器对应的数据库下执行如下命令:
SP_HelpTextSa_MoveSaleDetail来查看其明细内容。
但是要注意的一点是:
必须该存储过程没有加密,否则无法查看。
如果是跟踪错误,建议选择明细的跟踪,这样可以具体的定位到某个存储过程里的某条语句出的错。
错误和警告事件类,错误和警告是在发生SQLServer错误或警告时产生的事件类集合(例如,一个在编译存储过程中产生的错误,或者一个SQLServer中的异常错误),其对应的常用事件解释如下:
错误和警告事件类,该事件类里面又以Exception事件类为主要,基本上只要是SQL里面发生的错误其都能跟踪得到,这为我们快速定位错误提供了简便而准确的方法,我们来看下面的错误展示。
首先我们在运行一个跟踪,挑选出要跟踪的事件类为SQL:
BatchStarting;SQL:
BatchCompleted;Exception;数据列为默认的,我们再在查询分析器里执行一条SQL语句:
Updaterdrecordsetid=11报错如下:
服务器:
消息2601,级别14,状态3,行1不能在具有唯一索引aaRdRecord_PK的对象RdRecord中插入重复键的行。
语句已终止。
错误和警告事件类,停止跟踪,看看是否正确跟踪出错误:
错误和警告事件类,我们看到,没有任何问题,错误得以跟踪到,注意其上我以蓝色表注的语句,其TEXTDATA的内容都是一致的,只是对应的事件类分别为SQL:
BatchStarting和SQL:
BatchCompleted,正好把EXCEPTION事件类对应的事件给包在中间,那么我们就可以知道,引起错误的语句就是Updaterdrecordsetid=11了。
怎么样,定位错误就是这么简单!
我们把图再放在这里给大家对比一下看看:
跟踪详解,启动、暂停和停止跟踪在使用SQL事件探查器创建了模板后,可以使用新跟踪启动、暂停或停止捕获数据。
当启动跟踪且将服务器定义为源时,MicrosoftSQLServer将创建一个队列,以便为捕获的服务器事件提供一个临时存放位置。
每个跟踪可以有多个发生器。
发生器收集特定的事件分类内的事件,并将数据发送到队列。
事件按其放入队列内的顺序读取。
这种读取方法称为先进/先出(FIFO)。
使用SQL事件探查器时,启动跟踪将打开一个新的跟踪窗口(如果没有窗口打开),并立即捕获数据。
当使用SQLServer系统存储过程时,每次启用SQLServer实例时可手工或自动启动跟踪。
一启跟踪,就会立即捕获数据。
启动跟踪后,只能修改跟踪的名称。
暂停跟踪可防止捕获更多的事件数据,直到重新启动。
重新启动跟踪将继续执行跟踪操作。
先前捕获的所有数据都不丢失。
重新启动跟踪时,从启动的那一点起继续捕获数据。
当暂停跟踪时,可以更改名称、事件、列和筛选。
但是不能更改要将跟踪发送到的目的地或服务器连接。
停止跟踪将停止捕获数据。
一旦停止了跟踪,除非已将数据捕获到了跟踪文件或跟踪表中,否则重新启动该跟踪将丢失以前捕获的数据。
当停止跟踪时,将保留以前选择的所有跟踪属性。
当停止跟踪时,可以更改名称、事件、列和筛选。
跟踪详解,查看和分析跟踪使用SQL事件探查器可以查看跟踪内捕获的事件数据。
SQL事件探查器基于定义的跟踪属性显示数据。
分析MicrosoftSQLServer数据的一个方法是将数据复制到另一个程序,如SQL查询分析器或索引优化向导。
索引优化向导可以使用包含SQL批处理和远程过程调用(RPC)事件(以及Text数据列)的跟踪文件。
使用此向导时,通过指定服务器和数据库名称,可以对不同的服务器和数据库分析捕获的数据。
使用SQL事件探查器打开跟踪时,如果跟踪文件是由SQL事件探查器或事件探查器存储过程创建的,则该文件不需要带.trc文件扩展名。
说明SQL事件探查器还可以读取SQL跟踪日志文件(.log)和类属SQL脚本文件。
打开不带.log文件扩展名的SQL跟踪程序.log文件(如trace.txt)时,将文件格式指定为SQLTrace_Log。
可以用自定义的字体、字体大小、预览线和客户端缓冲区大小来配置SQL事件探查器的显示,以便有助于分析跟踪。
跟踪详解,分析数据以解决问题使用SQL事件探查器时,可以按Duration、CPU、Reads或Writes数据列将跟踪或跟踪文件分组以解决与数据有关的问题,如性能差或逻辑读取数特别高的查询。
通过将跟踪保存到表和使用Transact-SQL查询事件数据,可以找到附加的信息。
例如,若要确定哪些SQL:
BatchCompleted事件有过长的等待时间,可执行:
SELECTTextData,Duration,CPUFROMtrace_table_nameWHEREEventClass=12-SQL:
BatchCompletedeventsANDCPU(.4*Duration),跟踪详解,我们先来看一张图片,注意红色标注:
跟踪详解,说明我们可以将跟踪的结果保存到文件里或者保存到数据库的表里。
需要说明一点的是,如果保存在文件里,那么您在使用查询功能时需要注意一点:
大小写敏感,也就是说查询区分大小写,如RDRECORD与rdrecord是不同的内容。
而如果保存在表里的话则没有这种缺点,但是如果您希望保存在表里,最好选择其他服务器上的数据库来保存,特别是一些对数据库操作频繁的动作,如果保存在同一服务器上,也最好不要将结果表建立在目标数据库里,否则将会严重影响效率。
跟踪详解,查找跟踪内的特定事件下面是查找和分组跟踪内事件的基本步骤:
1、创建跟踪。
定义跟踪时,除了要捕获的任何其它数据列外,还要捕获EventClass、ClientProcessID和StartTime数据列。
按EventClass数据列将捕获的数据分组,并将跟踪捕获到文件或表。
2、查找目标事件。
打开跟踪文件或表,并展开想要的事件类的节点(如DeadlockChain)。
(可以在跟踪写入文件时打开文件进行查看,除非跟踪位于运行MicrosoftWindows98的计算机上。
使用查看菜单中的刷新命令显示新行。
)在跟踪内搜索直到找到正在查找的事件(可以使用SQL事件探查器的“编辑”菜单上的“查找”选项帮助查找跟踪内的值)。
记下所需事件的ClientProcessID和StartTime数据列中的值。
跟踪详解,3、在上下文中显示事件。
显示跟踪数据列属性,并按ClientProcessID而不是EventClass分组。
展开要查看的每个客户端进程ID的节点。
手工搜索跟踪,或使用查找选项,直到找到前面记下的目标事件的StartTime值。
这些事件与其它属于每个所选客户端进程ID的事件一起按时间顺序显示。
例如,跟踪内捕获的Deadlock和DeadlockChain事件紧接在展开的客户端进程ID中的SQL:
BatchStarting事件之后显示。
可以使用同样的技巧查找按ServerName、DatabaseID和ObjectID分组的事件。
一旦找到要查找的事件,按ClientProcessID、ApplicationName或其它事件类分组,按时间顺序查看相关活动。
如果跟踪文件位于运行MicrosoftWindows95/98的计算机上,则SQL事件探查器不能在跟踪文件正用于捕获事件时打开它。
此外:
运行在WindowsNT4.0上的SQL事件探查器不能打开位于Windows95/98共享目录的跟踪或脚本文件。
SQL事件探查器访问远程计算机上的跟踪或脚本文件时,如果这些文件后来变得不可用,则SQL事件探查器会引起问题。
跟踪详解,重播跟踪在创建或编辑跟踪时,可以保存跟踪供以后重播。
SQL事件探查器的特色是有一个多线程播放引擎,它能模拟用户连接和SQLServer身份验证,使用户得以重新产生跟踪内捕获的活动。
因此,重播对解决应用程序或进程的问题很有帮助。
识别出问题并进行了纠正后,对纠正后的应用程序或进程运行找到了潜在问题的那个跟踪,然后重播原来的跟踪并比较结果。
跟踪重播支持使用重播到断点和游标的方式进行调试,这在分析长脚本时尤为有用。
跟踪详解,说明:
对捕获数据以进行重播的跟踪使用样本跟踪模板SQLProfilerTSQL_Replay。
为了在运行MicrosoftSQLServer的(目标)计算机上,而不是在当初跟踪的(源)计算机上重播跟踪:
必须在目标上与源相同的数据库中创建跟踪内包含的所有登录和用户。
目标上的所有登录和用户必须具有与它们在源中相同的权限。
所有登录的密码必须与执行重播的用户密码相同。
重播与丢失的或不正确的登录相关的事件会导致重播错误,但重播操作会继续。
为了在SQLServer实例(目标),而不是在当初跟踪的(源)计算机上重播跟踪,需满足下列任一条件:
目标上的数据库ID必须与源上的数据库ID相同。
这可以通过从源创建master数据库的备份以及跟踪内所引用的任何用户数据库,然后在目标上还原这些数据库来实现。
必须将跟踪内包含的每个登录的默认数据库在目标上设置成登录各自的目标数据库。
例如,在源上,要重播的跟踪包含数据库Fred_Db内的登录Fred的活动。
因此在目标上,必须将登录Fred的默认数据库设置成与Fred_Db相匹配的数据库(即使数据库名称不同)。
若要设置登录的默认数据库,请使用sp_defaultdb系统存储过程。
跟踪详解,单步跟踪SQL事件探查器使您得以不必从头至尾全部重播跟踪内的所有事件,而按下面的方式重播跟踪:
一次重播一个事件通过一次一个事件地重播跟踪,可以检查每个事件发生后的效果。
使用单步跟踪继续重播跟踪时,重播下一个事件后跟踪再次暂停。
重播到断点通过在跟踪内指定一个或多个断点,可以按重播选项指定的设置,重播带断点标记的事件之前的所有事件,无须用户干预,播完后跟踪重播将暂停。
跟踪重播可以继续按一次一个事件、到下一个断点(若有)、到游标或到跟踪的结束处等方式重播跟踪。
如果在重播跟踪时不想检查断点前的每个事件,则重播跟踪到断点的方式很有用。
例如,已经调试了代码并确定了断点前的所有事件都按预期执行,不需要进一步检查这些事件。
重播到游标通过重播跟踪到游标(跟踪内的突出显示事件),可重播突出显示事件前的所有事件,无须用户干预。
但是,如果在跟踪内标记了一个断点,而这个断点位于游标和跟踪内下一个执行点之间,重播将在这个断点处停止,而不会继续重播到游标。
删除跟踪内的所有断点以重播跟踪到游标。
与断点一样,如果在重播跟踪时不想检查游标前的每个事件,重播跟踪到游标很有用。
单步跟踪有助于调试跟踪内捕获的事件。
例如,可以创建一个跟踪,监视所有提交的批处理的执行。
通过一次一个事件地(单步)重播跟踪内的事件,可以确定每个批处理发生时的效果,使您得以调试代码。
这比在批处理间放置大量的调试代码有效得多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 事件 探查 讲解