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事件会话,可以用编写脚本的方式

1 CREATE EVENT SESSION [blogtest] ON SERVER
2 ADD EVENT sqlserver.sql_statement_completed(SET collect_statement=(1)
3     ACTION(sqlserver.database_name)),
4 ADD EVENT sqlserver.sql_statement_starting(
5     ACTION(sqlserver.database_name))
6 ADD TARGET package0.event_file(SET filename=N'D:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Log\blogtest.xel')
7 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)
8 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. sql server调试_使用SQL Server扩展事件来调试应用程序

    sql server调试 介绍 (Introduction) Often enough, multilayer software has bugs. SQL Server Extended Event ...

  2. sql活动监视器 死锁_使用system_health扩展事件监视SQL Server死锁

    sql活动监视器 死锁 Performance monitoring is a must to do the task for a DBA. You should ensure that the da ...

  3. Serverless 开发前端初尝试

    Serverless 开发前端初尝试 啥是云开发 云开发serverless是一种模式,和传统模式的区别在于开发者不用维护服务器.服务器的日常维护, 负载均衡,扩容和减容, 运维,安全,日志等都交给了 ...

  4. sqlserver 扩展事件监控慢sql与阻塞sql,xml格式日志解析

    零. 启用参数 SqlServer中默认blocked process收集是不开启的,可以通过以下sql查看,值为0表示未开启. exec sp_configure 'show advanced op ...

  5. Alwayson 系统视图、常用sql、性能计数器、扩展事件

    一. 系统视图 1. 系统目录视图(System catalog view) 由于存储alwayson的配置信息,一旦确定后如果不修改配置不会再变化. System catalog view Desc ...

  6. Cydia Substrate 初尝试:刷计步软件数据

    Cydia Substrate 初尝试:刷计步软件数据 Cydia Substrate 初尝试刷计步软件数据 Cydia 设备准备 探索 思路 监听器注册 事件分发 进行Hook Cydia Cydi ...

  7. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件

    Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({//注意代码格式//el:eleme ...

  8. SQL Server 扩展事件系列 (1 of 31) -- 扩展事件概述

    1. SQL Server 扩展事件概述 SQL Server 2008引入了扩展事件(Extended Events),它提供了新的机制收信数据库引擎的内部事件信息,具有高性能或高度可配置性.扩展事 ...

  9. 利用扩展事件进行调优和Troubleshooting PPT分享

    本篇主题是我在2015年中国数据库大会(DTCC)上的分享,扩展事件从2008版本出来到现在已经有6-7年,国内却很少有相关资料和使用,现在分享一下PPT,希望对大家有所帮助. 可以点击这里下载. 转 ...

最新文章

  1. 一个简单实用的,基于EF的三层架构
  2. bzoj 3743 [Coci2015]Kamp——树形dp+换根
  3. 远程仓库都不知道,那你学Git干嘛?
  4. 修改大表字段属性报主键冲突
  5. Golang 汇编入门知识总结
  6. 世界是你们的,也是我们的,但终究是他们的!致程序员
  7. php家检乘除,php通用检测函数集(转)_php
  8. 软件测试需求分析还可以这样做
  9. mysql 解压版安装及DATA初始化 root用户密码修改
  10. 科学技术的不完备性及其实践意义
  11. 数字电子技术基础(五):编码器
  12. access 套用表格_将ACCESS数据库导入到EXCEL表格
  13. 配置RADIUS服务器
  14. mysql的启动脚本编写_老鸟带你开发专业规范的MySQL启动脚本
  15. java JSPX的介绍(转载)
  16. 腾讯云云服务器遭DDoS攻击被封堵的解决方法
  17. sphinxPHP api全文检索的例子
  18. 微信支付消费者投诉消息推送接入企业微信群
  19. 深度学习:深度复数网络(Deep Complex Networks)-从论文到pytorch实现
  20. 分布式日志sleuth+分布式追踪系统zipkin+消息中间件rabbitMQ+MySQL存储跟踪数据

热门文章

  1. [征询意见][投票]先集中力量做好一个开源项目
  2. Grafana文档(升级Grafana)
  3. CSS实现元素居中原理解析
  4. 【转】EventBus 3.0使用详解
  5. (八)流程控制 for标签和if标签
  6. c/c++基础 输入函数/流
  7. nginx之location匹配规则
  8. 编译x264 for ios
  9. 使用Debug Diagnostic Tool排除内存泄漏故障
  10. 经典面试题:计算积水的横截面积