SQLSERVER2012里的扩展事件初尝试(上)

SQLSERVER2012里的扩展事件初尝试(下)

周未看了这两篇文章:

扩展事件在Denali CTP3里的新UI(一)

扩展事件在Denali CTP3里的新UI(二)

觉得在SQLSERVER2012开始,扩展事件的管理更加容易了,之前一直没有用过扩展事件

只是听过,看了文章的介绍,觉得扩展事件跟SQLSERVER PROFILER有很多相似之处

大家可以融会贯通

之前有一篇文章:扩展事件在Denali CTP1里的新功能

文章里说在SQLSERVER2012之前,扩展事件的所有操作只能用TSQL或C#代码来实现

现在SQLSERVER2012就方便多了,有了新的GUI,趋向于傻瓜了,对我来讲是好事o(∩_∩)o 哈哈

趁机学习一下扩展事件


简单介绍

首先打开SQLSERVER2012的SSMS,依次点击打开管理-》扩展事件-》会话

在会话文件夹中,点击右键-》可以新建会话/新建会话向导

在已有的会话中,点击右键-》启动会话、新建会话、导出会话、删除、属性

这些菜单已经很丰富了

点击-》新建会话向导 ,SQLSERVER会一步一步引导您怎麽新建一个会话

包括设置会话熟悉感、选择模板、选择要捕获的事件、选择要捕获的全局字段、设置事件会话筛选器、指定会话数据存储

这个向导我就不介绍了,我们一般都不喜欢用傻瓜的向导,生怕漏了什么东西没有设置

其实大家看到向导中要设置的步骤:选择模板、设置事件会话筛选器、选择要捕获的全局字段,有没有觉得和SQLSERVER PROFILER差不多的感觉


建立会话

我们新建一个会话

弹出 新建会话 对话框

左边有常规、事件、数据存储、高级这些tab页

等一下会陆续介绍

常规页面

输入会话名称

在sql profiler里面就是输入跟踪名称

下面有一些选项,例如在服务器启动时启动事件会话,你可以根据自己实际情况进行勾选

大家知道开启sql profiler会对SQLSERVER的性能造成影响

那么,从下面的“在服务器启动时启动事件会话”

这里告诉我们两个信息

信息一:自动化程度高了,以往我们都是重启服务器就需要自己手动打开sql profiler来重新跟踪SQLSERVER的事件,现在有这个选项就方便多了

不用手动打开扩展事件

信息二:扩展事件对SQLSERVER的性能损耗不大

在园子里的燕洋天大侠的文章大话扩展事件第一篇:概述(上)里提到:

扩展事件的出现与设计主要是以性能为主要的出发点

我们可以使用一个文件目标对象在相关的时间发生之后将信息写入到文件中,这样就非常的轻量级了,并且可以精确到事件发生点

我们在会话名称里输入“blogtest”

会话中也提供了很多模板给我们使用

就像sql profiler里面

在文章扩展事件在Denali CTP3里的新UI(一)中也说了

我们支持与Profiler里模板类似的概念,只要选择一个模板,Event(包括Action和Predicate)和Target以及某些选项就自动选择好了

但是在CTP3里只有一个Standard模板,这个模板所选择的事件和Profiler里的Standard模板相对应

你也可以把自己创建的Session作为模板保存起来以备后用,保存模板只需要右键点击某个Session然后选择Export Session…即可

因为那篇文章出来的时候SQLSERVER2012也只是CTP3的阶段,所以那时候只有一个标准模板,现在SQLSERVER2012出来了

已经多了很多模板了

导出会话就相当于导出模板了

sql profiler里导出模板

导入会话模板

在新建会话对话框里选择模板的下拉列表有一个  <从文件...>

事件页面

事件页面是最复杂的,你首先看到它分为左右两部分,左边是事件库,所有在SQL Server里注册的扩展事件都列在这里,右边是你选择的事件。

在选择事件的时候,你可以点击名称列表头,进行事件名称的首字母进行顺序或者倒序排序,

类别和通道也是可以排序的

事件的类别非常多,包括cdc功能的事务日志扫描、死锁监视、高度可用性和数据的安全性(High Availability and Disaster Recovery,HADR)、垃圾回收等等

事件过滤,比如我在在事件库的输入框里输入sql_,所有名字含有sql_字样的事件都被列了出来并且高亮显示

过滤也可以按照事件名称和说明、仅事件字段、全部来进行过滤

类别和通道的类似于EXCEL的列筛选

我们选择sql_statement_starting和sql_statement_completed事件

点击所选事件页面右上方的配置按钮,页面将会滑动

配置事件页面

你可以点击“选择”返回刚才的事件库页面

你会看到闪电和漏斗图标分别出现在了右边配置页面的全局字段(操作)标签和筛选器(谓词)标签上

闪电代表的是该事件上有多少Global Fields(Actions)关联

漏斗代表该事件有没有Filter(Predicate)关联

SQLSERVER Profiler里每个事件都含有EventSequence列,而在XEvent里则被作为Action来实现了。

Predicate可以减少不必要的事件收集,比如我可以配置sql_statement_starting事件的Predicate为database_name=’Northwind’,

那么发生在其他数据库的sql_statement_starting事件就不会被该Session所收集,Profiler可以为所有事件设置一个Column Filter,

而XEvent支持为每个Event设置各自独立不同的Predicate

事件字段(Event Fields)标签列出所有该Event的列,某些Event会把一些开销比较大的列作为可选的列,你可以点击前面的CheckBox选择是否收集该列数据,

比如sql_statement_starting的statement列就可以被取消选择。

你可以同时选择多个事件并选择/取消全局字段(操作)或配置筛选器(谓词)

在这里我们为sql_statement_starting和sql_statement_completed事件,在全局字段(操作)里选择database_name

不添加谓词并保持事件字段为默认值。

完成之后在闪电和漏斗列会显示相应的动作和谓词的数量

如果配置谓词错误,在漏斗列会显示 打叉

我们删除子句就可以了

配置完毕之后,会看到sql_statement_starting(事件)和sql_statement_completed(事件)后面的闪电图标列有一个动作与之关联

数据存储页面

在这个页面里可以选择为Session添加不同的目标(Target)

这里我们选择event_file 目标并保持默认配置

高级页面

高级页面可以设置控制会话行为的高级选项,有一个选项需要特别注意,”最大调度滞后时间(Maximum dispatch latency)”

它描述了事件从被触发到写入到Target最长的等待时间,默认值是30秒,如果你使用和SQLSERVER Profiler client-side tracing

类似的Live Monitoring功能,你可能会希望把它改小,这样事件被触发后可以尽快地显示在SSMS里,

但需要注意到的是改小它会增加SQL Server的开销,这里我们把它改成5秒


完成创建

点击“确定”完成事件会话的创建

blogtest 会话将会被创建成功并显示在Object Explorer里

在会话被创建后,你可以在Object Explorer里右键点击该Session并选择属性,这将打开和创建会话相同的对话框,进行修改后点击确定即可。

如果你想查看怎麽用TSQL语句的方式能创建刚才blogtest事件会话,可以用编写脚本的方式

 CREATE EVENT SESSION [blogtest] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(SET collect_statement=(1)
ACTION(sqlserver.database_name)),
ADD EVENT sqlserver.sql_statement_starting(
ACTION(sqlserver.database_name))
ADD TARGET package0.event_file(SET filename=N'D:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Log\blogtest.xel')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=5 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO

启动会话并监视

启动会话

监视实时数据

当点击“监视实时数据”按钮,就会新建一个窗口

运行了一下,事件数量就不断上升

我们停止会话

但是似乎SQLSERVER有些问题

我以为SQLSERVER会删除了blogtest这个会话,然后我刷新了一下会话节点,没有删除,似乎SQLSERVER在这个地方有些bug

又或者是我自己操作不正确


xel文件

我们看一下D:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Log路径下的情况

我刚才停止了会话,又重新启动了会话,所以会产生两个blogtest xel文件

这里要注意一下,刚才我们在 数据存储 页面,默认的设置值是:勾选了启用文件滚动更新,并且在最大文件数里设置为5

这里跟SQL ERROR LOG是一样的,当blogtest这个会话产生的xel文件的文件数达到5个,就会删除最早的那个xel文件

然后生成一个新的xel文件

SQL ERRORLOG也是一样是滚动更新的,这里就不再详细叙述了~

system_health xel文件是安装SQLSERVER的时候已经创建好的

system_health 扩展事件会话

此会话源自产品支持团队的想法,它可以跟踪通常被用来对客户系统进行调试的信息

(例如当客户系统发生死锁或出现其它严重错误时)

此会话的创建和启动是 SQL Server 2008 实例安装过程的一部分

它在环缓冲区中跟踪事件,因此不会消耗太多内存.

SQL Server 2008使用扩展事件进行高级故障排除

我们用editplus打开,发现都是二进制的,我还以为是XML格式的


查看收集回来的xel文件

如果你想查看收集了一个晚上的xel文件,你可以直接把xel文件拖进去SSMS就可以了

上面那个blogtest_0_130315881898000000.xel一共收集了474个事件

不过扩展事件的文件名好像没有什么规律,如果别人给你一个xel文件叫你分析一下例如下图那个,从文件名你只能知道是2013年16日收集的事件信息

我们看一下扩展事件的结构

大家点击加号,会看到事件会话下面会有一个包

我们右键点击查看目标数据

就会弹出一个新窗口

上面弹出的新窗口显示了下面五个xel文件的所有事件,这样就不用每个文件逐个逐个地拖到SSMS里面看了,更不用打开文件资源管理器

大家不相信的话,可以把这五个xel文件拖到SSMS,然后相加起来,看是不是跟包的事件数目是一样的


总结

这一篇简单介绍了 扩展事件的创建和一些概念,下一篇会继续讲述如何用扩展事件来显示和分析数据

将试图找到一个workload中平均开销最大的query

个人感觉扩展事件跟SQL profiler真的很相似

SQL profiler把跟踪到的事件写入到trc文件

而扩展事件把事件信息写入到xel文件

而监控实时数据相当于在SQL profiler里开启跟踪,只不过一个在SQL profiler软件里查看跟踪的事件,而另一个直接在SSMS里查看事件

我觉得扩展事件就像把SQL profiler集成到SSMS里面一样,当然扩展事件的机制跟SQL profiler是不一样的

参考文章:

SQL Server 2008使用扩展事件进行高级故障排除

大话扩展事件第一篇:概述(上)

大话扩展事件第一篇:概述(下)

王成辉:用XEvent做高级Troubleshooting

如有不对的地方,欢迎大家拍砖o(∩_∩)o

SQLSERVER2012里的扩展事件初尝试(上)的更多相关文章

  1. SQLSERVER2012里的扩展事件初尝试(下)

    SQLSERVER2012里的扩展事件初尝试(下) SQLSERVER2012里的扩展事件初尝试(上) 我们继续文章扩展事件在Denali CTP3里的新UI(二)里的这个实验 脚本文件下载:http ...

  2. SQLServer2012基于扩展事件的阻塞监控

    一.前言 SQL阻塞Block是事务联机系统OLTP的产物.由于锁导致的资源等待,事务执行时间过长,直接影响业务:了解阻塞,发现阻塞,已作为DBA日常维护的重中之重. 通过dmv可以发现当前正在阻塞的 ...

  3. Android艺术开发探索第三章——View的事件体系(上)

    Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 Motion ...

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

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

  5. R语言爬虫初尝试-基于RVEST包学习

    注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...

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

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

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

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

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

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

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

    我们通过SQL Server 2014图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本. 步骤如下: 步骤1: 通过“对象资源管理器”连接到实例,展开“管理”.“扩展事件”.“会话”. 步骤 ...

随机推荐

  1. 使用Second Copy同步ftp服务器的差异文件

    公司一直用自主开发的一个同步工具来进行数据库文件异机备份的,但无奈太不稳定,三天两头出现服务挂死的问题,特别是最近这1个月,几天就1次. 问题现象都是服务一直在运行,但没有复制文件到备份机上,而且备份 ...

  2. 《Algorithms算法》笔记:优先队列(1)——API和初等实现

    1.优先队列的API和初等实现 做一个总结: 栈 :先进后出 队列 :先进先出 随机队列 : 随机出 优先队列:每次出来的是最大值或最小值 1.1优先队列的API 优先队列在很多场合都有用, 比如:在 ...

  3. 用python itchat写一个微信机器人自动回复

    首先看一下效果: 进入正题: 一.首先要去图灵机器人网站注册一个机器人账号: 链接:http://www.tuling123.com/ 你可以获取自己的图灵机器人apikey 懒得话不注册也可以,我下 ...

  4. [心平气和读经典]The TCP/IP Guide(005)

    The TCP/IP Guide[Page 47, 48, 49] I created The TCP/IP Guide to provide you with an unparalleled bre ...

  5. ibatis Dynamic总结(ibatis使用安全的拼接语句,动态查询)

    ibatis中使用安全的拼接语句,动态查询,ibatis比JDBC的优势之一,安全高效 说明文字在注释中 一.引入 一个小例子  <select id="selectAllProduc ...

  6. 常用算法2 - 广度优先搜索 & 深度优先搜索 (python实现)

    1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...

  7. C语言中内存管理规范

    一.内存申请 1.建议使用calloc申请内存,尽量不要使用malloc. calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据. 2.申请内存大 ...

  8. js 背景自动切换

    //首页自动更换背景特效开始============================================ var curIndex = 0; //时间间隔(单位毫秒),每秒钟显示一张,数组 ...

  9. 使用pd从数据库逆向生成pdm文件

    使用pd从数据库逆向生成pdm文件 好久没更新博客了,最近忙着各种事,捞了点老本行java的一些东西,浑浑噩噩,花了几天时间用java搭建了一个小项目的restful接口,深深觉得这东西论效率被nod ...

  10. Sqlserver2008及以上使用全文索引排除干扰词

    关于SQLServer2008全文索引干扰词 使用SQL SERVER 2008全文索引进行搜索 contains(Keywords, '"xx of xx*"')  (注意是后面 ...