在本篇,我通过使用新建“Session ”对话框来创建新的扩展事件会话。定义一个自己的扩展事件,动作和谓词,并且发布一个以收集事件数据为目的的会话。

首先从UI开始

在SQLServer2008R2以后(不包括2008R2),才引入扩展事件的内置UI。2008的版本可以通过安装插件的形式或者使用T-sql语句来实现扩展事件。如果是2012以后的SSMS客户端,也可以访问2008 的数据库实例,但是看不到扩展事件UI。在2008版本中缺少UI,意味着必须写T-SQL和XQuery来挖掘事件数据。2012以后提供了UI来读取2008版本中的目标文件,同时也能使用UI来进行事件数据分析。

一下的实例都是以SQLServer 2012版进行,为了使用SSMS中的扩展事件,首先在对象浏览器中打开Management | Extended Events,在打开Sessions ,看到当前实例的会话时间的列表。打开后你能看到内置的两个扩展事件,AlwaysOn_health and system_health

图1

需要注意,扩展时间的优点之一就是事件会话保存于服务器的元数据中,因此默认重启后保存在实例中,然而追踪定义则不是,在重启后必须要执行一个自定义的存储过程来重新创建追踪。扩展事件很好的解决了这些繁琐的配置。

首先,当我们建好扩展事件以后可以选择会话—>编写会话脚本—>Create 到—>新建查询编辑窗口,得到扩展时间的创建语句。这个语句是与以前我们自己编写的脚本略有不同的。

其次,SQLServer 包含一个with脚本结尾的一些会话级别的选项。这些选项都是默认的。

CREATE EVENT SESSION [XE_ReadsFilter_Trace] ON SERVER
ADD EVENT sqlserver.rpc_completed (
ACTION ( sqlserver.client_app_name
, sqlserver.database_id
, sqlserver.server_instance_name
, sqlserver.session_id
)
WHERE
( logical_reads >= 10000 ) ),
ADD EVENT sqlserver.sql_statement_completed (
ACTION ( sqlserver.client_app_name
, sqlserver.database_id
, sqlserver.server_instance_name
, sqlserver.session_id
)
WHERE
( logical_reads >= 10000 ) )
ADD TARGET package0.event_file ( SET filename = 'C:\temp\XE_ReadsFilter_Trace.xel' ,
max_file_size = ( 5 ) ,
max_rollover_files = ( 1 ) )
WITH ( MAX_MEMORY = 4096 KB ,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS ,
MAX_DISPATCH_LATENCY = 30 SECONDS ,
MAX_EVENT_SIZE = 0 KB ,
MEMORY_PARTITION_MODE = NONE ,
TRACK_CAUSALITY = OFF ,
STARTUP_STATE = OFF )
GO

  

代码1

我们使用UI创建一个新的事件会话,行为和属性,在过程的结束,又将构建这个扩展事件的语句输出了出来。

在UI创建一个新的事件会话

既可以使用新建会话向导或者新建会话。但是,向导可选项比较少,因此不推荐使用。所以我们重点介绍新建会话。

创建新的扩展事件,只需要邮件会话的文件夹,然后选择新建会话…对话框有四个属性页:常规,事件,数据存储和高级。

常规页

在常规页,我们可以输入事件名称,并且开启一些选项。这里我输入 HighReadQueries 作为名称,要求名称必须唯一 。

图2.常规页

事件页

下一步就是加一些事件,切换到事件页,选择我们选择我们打算追踪的事件并且配置他们。设定合适的操作和谓词。

添加事件

为了创建一个事件会话,一定要至少有一个事件。下面例子中,加入了两个事件,sqlserver.sql_statement_completedsqlserver.rpc_completed。这里可以搜索到所有的事件库,很多我们已经忘记的。在这个分析器中总共有180个时间供你选择,找到需要的。下面再事件库下面的输入框中输入completed ,下面的对话框自动将包含这个单词的事件筛选出来少于15个的事件。

图3

注意类别/通道这两个事件的列,基于关键字和通道的分类系统,被windows事件追踪所使用。这里不深入讲解了,理解就行。

双击要选中的两个事件,然后它们出现在右侧的列表中:然后点击配置按钮,添加动作和谓词。

图4

配置事件

事件配置选项由三个tab组成,全局字段,过滤和事件字段。

默认收集(事件字段)

事件字段标签展示事件所有列字段,构成事件的默认收集字段,有些开销较大的字段是可选收集与否的,如下图的data_stream…

图5

不同的事件有不同的默认捕捉事件数据。

添加操作

下面我们可以在全局字段tab中为两个事件添加需要的操作。操作也被称为全局字段,因为这些字段不特指任何独立事件,是公用的。

为了加上操作,只需要选中选择框。也可以把一个操作加到多个事件上,高亮两个事件,然后选中操作即可。这里我们把client_app_name, database_id, server_instance_name, 和session_id 加到这两个事件上。

图6

上述操作是普遍良性的。而扩展事件也提供额一下副作用的操作。例如debug_break字段就会引起调试中断。

设定过滤

最后,选择过滤tab来配置任意谓词。为了缩短事件估计,阻止扩展事件引擎收集没必要的数据,需要配置一个谓词来过滤事件数据。谓词配置和缩短逻辑是极其重要的。

例如,选中两个事件,然后从下拉列表选择logical_reads(逻辑读),改变操作符列为>=,然后输入10000。在这种配置下,我们的会话仅仅捕捉sqlstatement 或者存储过程执行超过时10000的逻辑读的事件。

图7

这种选择多个功能,加入相同的谓词给两个事件,限制了可利用的全局字段和俩个事件的普通字段。根据时间的选择,不是所有的字段都可以使用。例如,加入我们加入error_reported event事件,那么选择这三个事件时,逻辑读这个谓词就不能使用了。如下图

图8

在这个例子中,我们配置相同的谓词给两个事件,但是我们也可以灵活的配置每一个事件。

此刻,我们可以选择OK来创建事件会话完成会话,因为满足了最低要求。定义事件会话的目标是非必要的。例如,我们配置error_reported 事件加入create_dump_single_thread操作,没必要保存抓取数据。下面我们将介绍如何定义目标文件。

数据存储页:定义目标文件

选择数据存储也然后目标下面选择类型,选择event_file。接着下面输入文件名,选择浏览输入文件的输出位置。路径的最大长度是260个字符。例子中使用的是D:\temp\HighReadQueries。这里不需要包含文件的默认扩展名.xel。扩展事件引擎会附_0_和一个整性数字(文件创建时间到1600年1月1日的秒的数字)来作为文件结尾,保证文件名是唯一的。该文件类型提供了选项来设置最大文件的值,并且允许多次反复使用文件。如果没有指定文件最大值,则文件将会增长至填满驱动为止。

图9

高级会话选项

在高级选项页面,能看到额外的高级的会话选项。这里我们可以今后讨论,这里保持默认即可。

事件会话DDL

选择OK来完成会话,然后这个会话出现在扩展事件->会话的文件夹下,然后发现他是激活的,因为我们在一开始我们选择了可选框—创建会话后立即开启事件会话。生成T-SQL脚本,选择脚本按钮点击OK或者创建完成后右键输出创建脚本到查询窗口(之前介绍了)。这里我加上了相应的注释,以便理解。

/*Create the session, named as specified on the General page*/
CREATE EVENT SESSION [HighReadQueries] ON SERVER /*Add and configure events, actions and predicates, as specified on the Events page*/
ADD EVENT sqlserver.rpc_completed (
ACTION ( sqlserver.client_app_name,
sqlserver.database_id,
sqlserver.server_instance_name,
sqlserver.session_id )
WHERE ( [logical_reads] >= ( 10000 ) ) ),
ADD EVENT sqlserver.sql_statement_completed (
ACTION ( sqlserver.client_app_name,
sqlserver.database_id,
sqlserver.server_instance_name,
sqlserver.session_id )
WHERE ( [logical_reads] >= ( 10000 ) ) ) /*Add and configure a target, as specified on the Data Storage page*/
ADD TARGET package0.event_file ( SET filename = N'C:\temp\HighReadQueries' ) /* Set Session-level options, specified on the General and Advanced pages*/
WITH ( MAX_MEMORY = 4096 KB ,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS ,
MAX_DISPATCH_LATENCY = 30 SECONDS ,
MAX_EVENT_SIZE = 0 KB ,
MEMORY_PARTITION_MODE = NONE ,
TRACK_CAUSALITY = OFF ,
STARTUP_STATE = ON );
GO

  

代码2

与我们之前的代码很像。除了有会话立即开始,我们还选择了”捕获实时在屏幕上监视数据“。一个新的窗口被打开来显示被事件会话捕捉的数据,就像Profiler做的一样。但是不同的时,当观察实时数据引起系统性能问题时,监视器将会自动关闭。

总结

完成后,我们已经熟悉了扩展事件,比如创建基本会话,捕捉一个或者多个事件信息,收集操作的数量,使用简单的谓词,写入文件等等。可视化操作大大减轻了脚本的难度,也提供了很多基础信息的选择,大大方便了扩展事件的开发。这块只是开始应用,希望有大神能指点一下。

SQL 扩展事件的更多相关文章

  1. 使用SQL Server 扩展事件来创建死锁的时间跟踪

    我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪. 步骤1: 通过“Object Explorer”连接 ...

  2. 如果正确读取SQL Server中的扩展事件?

        SQL Server中使用扩展事件捕捉所需的信息后,可以选择存放的位置.比如说内存或文件中,但无论存在哪里,其本质都是一个大XML.因此在SQL Server中读取该XML就是解析扩展事件结果 ...

  3. SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events

    由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...

  4. 借助扩展事件查看SQL 2016备份和还原操作的内幕

    当遇到备份或者还原操作占用较长时间时,很多人会问: 备份/还原是不是僵死了?要不要kill掉,再重来? 到底是哪一个部分的操作占用较长时间? 到底现在进行到什么阶段了? 在SQL 2016 之前,要回 ...

  5. SQL Server 扩展事件

    SQL Server 扩展事件(Extended Event)是用于服务器的常规事件处理系统,是追踪SQL Server系统运行状态的神器,同时也是一个日志记录工具,扩展事件完全可以取代SQL追踪(S ...

  6. SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念

    本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事 ...

  7. SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event

    本文属于 SQL Server扩展事件(Extended Events)从入门到进阶 系列 对于接纳扩展事件,其中一个最大的障碍就是要对XML和XQuery有一定的了解以便分析数据.我们可以使用T-S ...

  8. SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件

    本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 第一篇文章中提到了如何在Profiler中创建跟踪(trace),并以服务器端(server-side)跟 ...

  9. SQL Server扩展事件的使用ring_buffer target时“丢失”事件的原因分析以及ring_buffer target潜在的问题

    事情起因: 排查SQL Server上的死锁问题,一开始想到的就是扩展事件, 第一种方案,开profile守株待兔吧,显得太low了,至于profile的变种trace吧,垂垂老矣,也一直没怎么用过. ...

随机推荐

  1. Error Code: 1175.You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.

    在MySQL Workbench里面使用SQL语句: delete from 表名 提示出错: Error Code: 1175.You are using safe update mode and ...

  2. 关于Class.getResource和ClassLoader.getResource的路径问题

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...

  3. 利用Yii框架中的collections体验PHP类型化编程

    注:20150514 看过 惠新宸 关于PHP7的PPT后,看到了这一特性将被支持. Scalar Type Declarations function foo(int num) function ...

  4. objective-c NSMutableAttributedString

    NSMutableAttributedString 是一个很强悍的富文本处理字符串,可以方便的实现一个字符串中某个字符的样式处理.我把我下面代码实现的功能步骤说一下:首先拼接两个字符串,然后给前前半部 ...

  5. Win10环境下安装theano并配置GPU详细教程

    一.软件和环境 (1)安装日期2016/12/23: (2)原材料VS2013,cuda-8.0(最好下载cuda7.5,目前theano-0.8.2对cuda-8支持不是很好),Anaconda3- ...

  6. 设置placeholder字体颜色

    /*设置placeholder字体颜色*/::-webkit-input-placeholder{ color: #FFF;}:-ms-input-placeholder{ color: #FFF;} ...

  7. javascript脚本设置输入框只读的问题

    今天在开发中准备通过javascript设置input框只读属性的时候,用document.getElementById('input').readonly='readonly';结果发现这样设置无效 ...

  8. css知多少(10)——display

    1. 引言 网页的所有元素,除了“块”就是“流”,而且“流”都是包含在“块”里面的(最外层的body就是一个“块”).在本系列一开始讲<浏览器默认样式>的时候,大家也都看到了浏览器默认样式 ...

  9. Perfect Scrollbar – 完美的 jQuery 滚动条插件

    Perfect Scrollbar 是一个很小的,但完美的 jQuery 滚动插件.滚动条不会影响原来的设计布局,滚动条的设计是完全可定制的.你可以改变几乎所有的 CSS 样式的滚动条,滚动条设计对脚 ...

  10. Seen.js – 使用 SVG 或者 Canvas 渲染 3D 场景

    Seen.js 渲染3D场景为 SVG 或者 HTML5 画布.Seen.js 包含对于 SVG 和 HTML5 Canvas 元素的图形功能的最简单的抽象.所有这个库的其它组件都是不用关心将要渲染的 ...