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

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

我们继续文章扩展事件在Denali CTP3里的新UI(二)里的这个实验

脚本文件下载:http://files.cnblogs.com/lyhabc/instnwnd.rar

我们打开上篇创建的blogtest扩展事件会话的属性

检查一下sql_statement_starting事件和sql_statement_completed事件的谓词是不是database_name=’Northwind’


运行workload

大家可以看到instnwnd.sql这个文件是比较大的,执行的时候会产生一些workload

我们启动blogtest会话

然后执行instnwnd.sql脚本

如果你的机器运行这个脚本很长时间,你可以点击工具栏的“停止数据反馈”,SSMS会停止继续显示实时数据

实时数据窗口可能只有两个列name和timestamp,这是仅有的2个所有扩展事件共有的列

你可以选择工具栏上的选择列按钮,添加/删除需要显示的列

我增加了3个列database_name,duration和statement

我们要找到Northwind数据库里平均执行时间最长的query,首先我们可以过滤不必要的事件

上篇曾提到过谓词可以在SQL Server端避免不需要的事件被产生,我们同时也支持客户端的过滤器,这可以帮助你做各种分析

点击工具栏上的筛选器按钮,这将打开筛选器对话框

这里我们设置两个条件name=sql_statement_completed And database_name=Northwind

为了避免输入错误,你可以从事件列表里拷贝粘帖,你还可以右键点击某个单元格,然后选择Filter by this Value,

这将自动为你添加一个子句并And到原有条件上

设置完毕之后点击确定

过滤掉不必要的事件后我们按照statement来做分组,点击工具栏上的分组按钮

把statement移动到右边,点击确定

分组的目的是为了计算每个分组上duration的平均值,下面可以点击工具栏上的聚合按钮

我们在duration上聚合类型选择AVG

然后选择在duration(AVG)上按降序排序

这样duration平均值最大的分组将被显示在第一行

我执行instnwnd.sql的workload里duration最大的分组是“exec master.dbo.sp_MSdbuserpriv N'serv'”

它的duration是13610微秒,这样我们就找到了平均开销最大的query

我们用单位换算器换算一下

你可以通过 打开-》合并扩展事件文件-》来打开生成的xel文件


总结

大家一定会好奇,为什麽在创建事件会话的时候会有筛选器,在SSMS工具栏又有筛选器

其实扩展事件是属于SQLSERVER端的,把SQLSERVER profiler的功能搬到SQLSERVER端,当然不是简单的搬到SQLSERVER端

而SSMS的工具栏只是提供一些分析xel文件的工具,这些跟SQLSERVER profiler是差不多的

比如人家给你一个xel文件,你需要SSMS的扩展事件工具栏的工具去分析

而以前SQLSERVER profiler是属于客户端的(是一个客户端工具),profiler获取SQLSERVER端的各种事件,然后传送回客户端,

在SQLSERVER profiler界面上显示给大家

所以大家可以理解为扩展事件就是把SQLSERVER profiler的功能集成到SQLSERVER端,反正我是这样理解的,不过这个集成不是简单的集成


扩展事件读取的三种方法对比

这一章节介绍三种审计日志分析方法的对比,我们将会从以下几个角度来衡量这三种方法:

DMF
sys.fn_xe_file_target_read_file是SQL Server本身内置的对象,所以使用这种方法分析审计日志信息,无需过多的编程处理,门槛较低,甚至可以直接使用SSMS都可以分析审计日志文件。这些是使用DMF分析审计日志的优点。当然,这个方法的缺点也很明显:使用DMF方式读取审计日志,需要连接到SQL Server服务,所以要求SQL Server服务本身是启动的,因为这个是使用SQL Server内置的动态管理函数来实现的;而且这种分析方法需要使用SQL Server对XML操作技术来解析event_data,解析XML是一个CPU密集型操作,非常消耗系统CPU资源。在我之前的测试案例中,使用DMF方法分析审计日志详情导致了50%多的额外CPU开销。如下截图所示:

XEReader API
使用SQL Server XEReader提供的API读取审计日志文件的方法,完全是基于审计日志文件的操作方式,可以独立于SQL Server的服务。换句话说,不管SQL Server是处于关闭还是启动状态,对我们审计日志的分析不会受到任何影响。这些是使用XEReader API分析审计日志的优点。而这个方法也有它的缺点:当我们分析当前(正在被Extend Event Session对象写入的日志文件)审计日志文件时,我们不知道(或者很难知道)哪些记录是我们分析过的,哪些是还未分析的?如果这个问题解决不了的话,很可能就会导致审计日志记录的重复或者丢失。当然,我们也可以采用XE循环写入审计日志文件的方法,每次读取Archive出来的审计日志文件,跳过当前文件的读取,等待当前文件写满固定大小,Archive出来以后,再来读取分析。这个改进方法会引入另外一个问题是,可能会导致审计日志的分析延迟,而且延迟的时间还不确定。比如:用户查询在10分钟后才写满当前审计日志文件,那么延迟是10分钟;如果用户查询在1个小时之内才写满当前审计日志文件,那么延迟将是1个小时。

事件流读取
基于用户查询事件流式分析审计日志的方法,优点也特别明显:延迟非常小,可以控制在秒级内,实时性表现良好,它解决了XEReader API查询事件延迟的问题。然而缺点是:也需要依赖SQL Service的启动状态,否则会报告异常;在大量查询瞬间(短时间内)执行的时候(比如用户不小心写了一个死循环查询),重启SQL Service或者Extend Event Session状态时,根据我测试的情况来看,这种场景会导致审计日志记录丢失,可靠性得不到保证。
最后总结

基于以上三种审计日志分析方法的优缺点总结来看,我们综合打分汇总如下:
DMF:对SQL Service有依赖,得分0;延迟取决于Offset的移动效率,得分80;稳定性有保证,得分100;对SQL Server CPU影响较大,得分为0;
XEReader API:对SQL Service无依赖,得分100;延迟取决于查询产生的速度,得分50;稳定性有保证,得分100;对SQL Server 影响很小,得分为0;
XEReader Stream:对SQL Service有依赖,得分0;延迟非常低,得分100;有不稳定的场景存在,得分50;对SQL Server 影响较小,得分为100;

阿里云内核月报:http://mysql.taobao.org/monthly/2017/08/08/

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

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

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

    SQLSERVER2012里的扩展事件初尝试(上) SQLSERVER2012里的扩展事件初尝试(下) 周未看了这两篇文章: 扩展事件在Denali CTP3里的新UI(一) 扩展事件在Denali ...

  2. 通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?

    原文:通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了? 问题就是,一个很简单的语句,在不同的服务器上执行,所需要的时间相差很大,特别提到在性能差的服务器上反而快,在性能 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. SQL 扩展事件

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

随机推荐

  1. 【java排序】 选择排序,插入排序,希尔算法

    一.选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法 ...

  2. GODADDY 优质DNS 未被墙

    下面列出的是我本地测试出的优质服务器 NS10.DOMAINCONTROL.COM NS12.DOMAINCONTROL.COM NS14.DOMAINCONTROL.COM NS19.DOMAINC ...

  3. implements和extends的区别

    extends可以理解为全盘继承了父类的功能 implements可以理解为为这个类附加一些额外的功能 举个例子,Animal是一个父类,cat,dog,bird,insect都extends了Ani ...

  4. 可视化的Redis数据库管理工具redis-desktop-manager的初步使用(图文详解)

    不多说,直接上干货! 无论是Linux 还是 Windows里安装Redis, Windows里如何正确安装Redis以服务运行(博主推荐)(图文详解) Windows下如何正确下载并安装可视化的Re ...

  5. linux-统计文本中符合条件的内容

    1, 单个条件匹配, cat results.log | grep 'status=402' 2, 多个条件匹配 1), 2个条件都要满足 cat results.log | grep "s ...

  6. redis-java中的callback回掉机制

    springboot整合redis后, 会提供StringRedisTEmplate和 RedisTemplate 两个模板类供食用, 有时候这并不能满足我们的需求, 需要使用 connect 处理, ...

  7. 自学C Primer Plus时还没想明白的问题

    2016年11月24日 1. 计算机中两个浮点数怎样进行加法运算.2. 为什么计算机在计算时存在损失精度的可能3. 无符号数和有符号数的运算是怎样的4. printf中使用格式控制符的截断问题,比如% ...

  8. 【BATJ面试必会】Java 基础篇

    一.数据类型 包装类型 缓存池 二.String 概览 不可变的好处 String, StringBuffer and StringBuilder String Pool new String(&qu ...

  9. 使用T4Scaffolding 创建自己的代码生成

    nuget查找引入T4Scaffolding.Core 这个是最低层的,没有其他依赖,当然也没有现成的模板 这个有对EF的依赖,自带了生成DBContext的模板   这个自带了一些mvc的contr ...

  10. Dubbo下载-从missing artifactId说起

    项目pom文件引入dubbo 报 missing artifactId https://github.com/dangdangdotcom/dubbox 从GitHub上直接下载解压包, 最好下载分支 ...