在本篇,我通过使用新建“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. 修正 XE6 TListView 上方 SearchBok 右边的清除钮显示

    注意:XE7 已修正这个问题. Delphi Firemonkey TListView 提供了搜寻的功能,但在 XE6 以前的版本,可以显示右边的清除按钮,在 XE6 确消失了,这里提供一个修正的方案 ...

  2. PHP程序员7小时学会Kotlin 第二小时

    Kotlin中,一切皆对象:PHP则并非一切皆对象,甚至不需要对象的存在即可完成系统功能开发,我们现在可以接触到的旧的系统都可以说明这一点. 基本数据类型 数值型 类型 位长 双精度浮点型Double ...

  3. postgreSQL绝对值

    select * from t where flag=1 order by abs(index) desc

  4. 项目总结笔记系列 Maven Session1

    主题:Maven 参考地址: 1.http://www.yiibai.com/maven/ 2.http://www.icoolxue.com/ 目录 1.环境搭建 2.pom.xml文件解析 3.m ...

  5. iOS AFNetworking 打印从服务器返回的错误提示信息

    每次做项目的时候都会在网络请求时候测试接口的时候会出现一些不同的错误,而控制台打印的错误提示信息都是data类型,看不出提示的错误的信息是什么.后面经过一些查阅发现其实是可以把这个转变为string的 ...

  6. linux系统下nodejs安装过程随记

    首先下载适合的版本.这里我使用的是node v.10.36 先介绍编译安装的详细过程. 下载该版本: wget http://nodejs.org/dist/v0.10.36/node-v0.10.3 ...

  7. 使用PhpStrom等IDE编辑 远程linux服务器上的文件 实时更新

    习惯了在linux上 vim进行PHP的开发,突然忘了IDE的感觉,所以想到了.通过PhpStrom等IDE直接编辑 samba共享到 mac或者windows本地的磁盘进行编辑. 为了忘却的纪念,有 ...

  8. Wowza® Media Systems 使用配置手册。

    准备 1,先安装Java:http://www.java.com/zh_CN/ 2,官网下载安装:http://www.wowza.com/pricing/installer ,需要输入用户名邮箱等信 ...

  9. CentOS系统Kernel panic - not syncing: Attempted to kill init

    结果启动虚拟机出现如下问题: Kernel panic - not syncing: Attempted to kill init     解决方法: 系统启动的时候,按下'e'键进入grub编辑界面 ...

  10. 使用 Google Analytics 跟踪 JavaScript 错误

    Google Analytics(谷歌分析)不仅仅是一个流量统计工具,你还可以用它来测量广告活动的有效性,跟踪用户多远到所需的页面流(从点击广告到购物车到结账页面)获取,并基于用户的信息设置浏览器和语 ...