您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 快速应用SQL_Server事件探查器
快速应用SQLServer事件探查器用友软件股份有限公司小型服务支持部2009年9月整体概念SQL事件探查器是图形工具,使我们得以监视MicrosoftSQLServer实例中的事件。可以捕获有关每个事件的数据并将其保存到文件或SQLServer表中供以后分析。例如,我们可以对生产环境进行监视,了解执行速度太慢而妨碍性能的存储过程;了解到哪些SQL语句或者存储过程产生了异常错误导致程序中断等等。SQLSERVER2005的事件探查器的位置略有不同SQL事件探查器术语模板模板定义想要使用SQL事件探查器监视的每个事件的准则。每次启动事件探查器监视时都会让您选择一个模板来进行跟踪,默认是一个标准模板(SQLProfilerStandard)。里面有事先定义好的的事件和数据列,没有筛选。我们可以创建一个模板以指定使用哪些事件、数据列和筛选。然后可以保存该模板,并用当前的模板设置启动跟踪。捕获的跟踪数据基于模板中指定的选项。模板不执行且必须用.tdf扩展名保存到文件。我们也可以创建一个自己的模板,并设置成每次启动自动运行该模板,具体操作如下:点“工具”菜单下的“选项”,弹出如下窗口(请注意红色区域):模板模板【使用下列默认跟踪模板】:您可以在这里选择一个默认的跟踪模板,这样每次新建一个跟踪时就以该模板为默认模板;【进行连接后立即启动跟踪】:选择该选项,连接上对应的服务器后立即运行默认跟踪模板进行跟踪;【显示】页签下您可以设置所使用的跟踪窗体显示的字体、字体的大小,这里就不在赘述。模板我们还可以保存模板以减少我们的重复劳动。保存模板涉及保存跟踪定义,比如指定的数据列、事件和筛选。跟踪定义包括事件类、数据列、事件准则(筛选)和所有其它用来创建跟踪的属性(捕获的事件数据除外)。使用SQL事件探查器创建的模板保存在运行SQL事件探查器的计算机上的文件中。如果经常监视SQLServer,则保存模板以便分析性能。模板每次捕获相同的事件数据,并使用相同的跟踪定义监视同一事件,因而无须在每次创建跟踪时都定义事件类和数据列。另外,可以将模板提供给其他用户,供其监视特定的SQLServer事件。例如,支持提供商可提供给客户一个模板。客户使用这个模板捕获所需的事件数据,然后将这些数据发送给支持提供商供其分析。我们可以在“文件”菜单下“新建”下的“跟踪模板”里建立一个新的模板,选择好对应的事件类和数据列后将其保存,建议按应用场景取名以便是使用,如“存储过程跟踪模板”、“错误定位跟踪模板”等。模板同样我们也可以修改保存在运行SQL事件探查器的本地计算机上的文件中的模板以及从文件导出的模板。如果没有记住当初用于创建跟踪的模板,或希望以后再次运行同一跟踪,则可能需要从跟踪文件导出模板。修改模板属性(如事件类和数据列)的方法与当初设置该属性的方法相同。可以添加和删除事件类和数据列,也可以对筛选进行更改。修改模板后,以同一名称保存它将重写原来的模板。当处理现有跟踪时,可以查看属性,但不能修改。警告:使用相同的名称保存跟踪文件将重写原来的跟踪文件,这将导致任何当初捕获的事件或已删除或筛选的数据列丢失SQL事件探查器术语事件事件是在MicrosoftSQLServer引擎中生成的操作。例如:登录连接、失败和断开。Transact-SQLSELECT、INSERT、UPDATE和DELETE语句。远程过程调用(RPC)批处理状态。存储过程的开始或结束。SQL批处理的开始或结束。存储过程内的语句的开始或结束。写入SQLServer错误日志的错误。在数据库对象上获取或释放的锁。打开的游标。安全权限检查。由事件生成的所有数据显示在单个行中的跟踪内。该行包含详细描述事件的数据列,称为事件类。SQL事件探查器监控事件分类常用的事件分类:事件分类描述游标游标操作产生的事件类集合。数据库数据或日志文件自动增长或收缩时产生的事件类集合。错误和警告发生SQLServer错误或警告(例如,编译存储过程时发生的错误或SQLServer中的异常错误)时产生的事件类集合。锁获取、取消或释放锁等时产生的事件类集合。对象创建、打开、关闭、除去或删除数据库对象时产生的事件类集合。性能执行SQL数据操作语言(DML)运算符时产生的事件类集合。扫描扫描表和索引时产生的事件类集合。安全审核用于审核服务器活动的事件类集合。会话由连接到SQLServer实例的客户端和断开与SQLServer实例的连接的客户端产生的事件类集合。存储过程执行存储过程所产生的事件类集合。事务执行Microsoft分布式事务处理协调器(MSDTC)事务,或写入事务日志所产生的事件类集合。TSQL执行从客户端传递到SQLServer实例的Transact-SQL语句所产生的事件类集合。用户可配置用户可配置的事件类集合。TSQL事件类TSQL事件类是一个常用的事件,其对应的常用事件解释如下:事件类描述ExecPreparedSQL表示ODBC、OLEDB或DB-Library执行准备好的SQL语句的时间。PrepareSQL表示ODBC、OLEDB或DB-Library将SQL语句准备好以便使用的时间。SQL:BatchCompletedTransact-SQL批处理已完成。SQL:BatchStartingTransact-SQL批处理已启动。SQL:StmtCompletedTransact-SQL语句已完成。SQL:StmtStartingTransact-SQL语句已启动。UnprepareSQL表示ODBC、OLEDB或DB-Library撤消准备好的SQL语句的时间。TSQL事件对应数据列:事件类数据列描述ExecPreparedSQLEventClass记录的事件类型=72。Handle准备好的TSQL语句的句柄。PrepareSQLEventClass记录的事件类型=71。Handle准备好的TSQL语句的句柄。SQL:BatchCompletedEventClass记录的事件类型=12。Duration事件的持续时间。EndTime事件的结束时间。Reads由批处理导致的页读取I/O数。Writes由批处理导致的页写入I/O数。CPU批处理过程中使用的CPU。TextData批处理的文本。SQL:BatchStartingEventClass记录的事件类型=13。TextData批处理的文本。SQL:StmtCompletedEventClass记录的事件类型=41。Duration事件的持续时间。EndTime事件的结束时间。Reads由SQL语句发出的页读取数。Writes由SQL语句发出的页写入数。CPU由SQL语句使用的CPU。IntegerData由SQL语句返回的行数。ObjectID如果曾在存储过程中运行SQL语句,则是父存储过程的对象ID。NestLevel如果曾在存储过程中运行SQL语句,则是存储过程的嵌套级。TextData将要执行的语句文本。SQL:StmtStartingEventClass记录的事件类型=40。ObjectID如果曾在存储过程中运行SQL语句,则是父存储过程的对象ID。NestLevel如果曾在存储过程中运行SQL语句,则是存储过程的嵌套级。TextData将要执行的语句文本。UnprepareSQLEventClass记录的事件类型=73。Handle准备好的TSQL语句的句柄。存储过程事件类存储过程事件类是执行存储过程所产生的事件的集合,也是一个常用的事件类,其对应的常用事件解释如下:存储过程事件类SP:Starting---表明存储过程已被启动的时间,其监视到的结果是整个存储过程的调用,结果形式如:execSa_MoveSaleDetail'Sa_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事件探查器术语筛选当创建跟踪或模板时,可以定义筛选由事件收集的数据的准则。如果没有设置筛选,跟踪输出中将返回选定事件类的所有事件。例如,可以将跟踪中的MicrosoftWindows®2000用户名限制为特定用户,以将输出数据如果跟踪变得太大,可以基于想要的信息进行筛选,以便只收集事件数据的减少到感兴趣的那些用户。也可以只跟踪对特定数据库的操作的信息,这样在多帐套的服务器上就可以更快的收集到我们感兴趣的信息。SQL事件探查器术语跟踪跟踪基于选定的事件、数据列和筛选捕获数据。例如,可创建模板监视异常错误。为此,应选择跟踪Exception事件类以及Error、State和Severity数据列,这些都是为了使跟踪结
本文标题:快速应用SQL_Server事件探查器
链接地址:https://www.777doc.com/doc-4058893 .html