设为首页 收藏本站
查看: 996|回复: 0

[经验分享] 使用Extended Events诊断SQL Server 2012

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-18 10:28:39 | 显示全部楼层 |阅读模式
Extended Events是SQL Server 2012自带的轻量型诊断工具。如果你已经熟悉Profiler和SQL Trace这样的工具,那么基于当前的监视,你就熟悉下面的例子:解决阻塞和死锁、发现长时间运行的查询、追踪DDL操作、记录缺失的列统计。发掘Extended Events更为高级的功能时,你会看到它很容易追踪如下事件:长时间运行的物理I/O操作、引起特定wait sats发生的语句、SQL Server内存压力及AlwaysOn Availability Groups事件。
Extended Events会收集和存储特定事件相关的额外信息,其相关术语如下:
Sessions
Extended Events session是用户自定义的events、actions,、filters和targets的组合,存放在SQL Server实例中。你可以使用T-SQL或SSMS的GUI创建一个session。图13-2显示了SSMS中它的位置及一些已经配置的对话。右击某个会话,可以看到其相关的选项。
SouthEast.jpg
Events
Events是SQL Server中发生的事情。为了存储事件定义及内部代码,Extended Events引擎使用自带的叫做包的容器。如果你想知道有些什么样的包,你可以使用如下查询:
select name, description from sys.dm_xe_packages
事件自身也可以通过DMV查看,查询语句如下:select name, description from sys.dm_xe_objects where object_type = 'event' order by name
Extended Events对等的Profiler事件,可通过如下查询查看:
  • select t.trace_event_id as 'Trace Event ID', t.name as 'Trace Event Name',  
  • x.xe_event_name as 'XE Event Name'  
  • from sys.trace_events t  
  • join sys.trace_xe_event_map x  
  • on t.trace_event_id = x.trace_event_id  

Event Fields
你可以从Extended Event DMV中查询一个事件的时间栏位列表,例如下面的查询:
  • select c.name, c.description  
  • from sys.dm_xe_object_columns c  
  • join sys.dm_xe_objects o on o.name= c.object_name  
  • where o.name = 'sql_statement_starting'  

Actions
当你配置一个对话要监视一个事件发生时,事件自身不大可能提供你解决问题所需的所有数据。Actions就是Extended Event为你提供额外数据的途径。SQL Server 2012有48个Actions或全局栏位。你可以通过如下SQL查询可用的Action:
  • SELECT name, description FROM sys.dm_xe_objects WHERE object_type ='action' and capabilities_desc is null ORDER BY name  

Action抓获到所需的额外数据后,会以异步形式将其写入日志文件,因此它不会影响用户查询的性能。
Filters
Filters在Extended Events上下文中也称为判断,两个术语都描述了它们的用意,因为定义session时它们的行为像WHERE语句,仅仅满足特定标准的事件才执行。Filters能够深入数据库内部对象,及SQL Server实例的、查询的运行时属性。因此,你开始时,最常使用的filters是用于查询的运行时期间,锁或对象ID。定义的过滤常被认为是一个布尔表达式,这意味着你应该把焦点放在使用=,>,<及<>操作符上。下面是定义session时filter的例子:
  • 所有用户数据库的事件:sqlserver.database_id > 4
  • 所有用户数据库中非系统任务执行的事件:sqlserver.database_id > 4 and sqlserver.is_system = 0
  • 耗时超过10秒的查询:duration > 10000
可用的过滤(判断源)可以通过如下查询获取:
  • select name, description from sys.dm_xe_objects where object_type = 'pred_source'  

Extended Events使用一个称之为short circuiting(短路)的方式来评估一个session的过滤,目的是控制开销,因此它比其他工具都高效。
Targets
Target是所有Extended Events抓取的信息的目的地。
Event Files:  驻留在OS驱动器的平面文件,事件数据就是被写入到这里。它们会保留,直到你手动去删除。事件文件自身有默认的扩展名.xel,存放二进制数据,没有像SSMS这样的工具是不可读的。SSMS能够打开这些文件,即使是从其他服务器上获得的。它能够把数据导出到一个数据库表中,或一个CSV文件中。Extended Event引擎首先把数据写入内存缓存区,然后由第二个进程把它从内存写入磁盘,这种行为也被视为异步的。
Memory Buffer Size:  可配置,FIFO策略。
Event Retention:  如果内存缓存区填满了,也可以配置一个称之为Event Retention的选项。有3种选项来决定内存缓存区满了后该如何响应:no event loss、single event loss(默认选项)和multiple event loss。
Maximum Dispatch Latency:  要确保内存缓存区从不填满,有两个方案,设置一个很大的memory buffer size,或配置maximum dispatch latency。默认值是30秒。
Ring  Buffer:  类似event file target。两者最大的差异是SSMS不会把XML内容翻译成可读的数据。另一个差异是ring buffer不会使用任何物理存储,纯粹是一个内存结构,很像memory buffer。因此,里面的数据在填满时、及空间被新的事件占用时,或SQL Server停止时会丢失。
Event  Counter:  它不会存储任何事件数据,而是对事件发生的次数进行计数。它类似ring buffer,是一个in-memory structure。
Histogram(直方图):在你识别数据趋势时非常有用,它能够让你聚焦事件细节的一个特殊类型,它也是内存结构,其内容不会写入到事件文件。如图13-4所示,wait stats 796和131发生最频繁,但需要DMV查询来获知它们是什么:select map_key, map_value from sys.dm_xe_map_values where name = 'wait_types' order by map_key
   SouthEast.jpg
Pair Matching:  是另一个事件数据处理target,不是存储target,使你能够舍弃结果集中的2套相关的事件数据。
Event  Tracing for Windows(ETW): 硬核端的target。使用ETW使SQL Server能够把事件数据和外部Windows调试软件集成起来,以便获取一张完整的系统性能图。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22290-1-1.html 上篇帖子: 使用SQL Nexus整合----解决日常问题 下篇帖子: 使用Extended Events诊断SQL Server 2012----在SQL Server 2012中创建Extended Event会话
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表