【IT168 数据库大会现场报道】2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕。在为期三天的会议中,大会将围绕大数据应用、数据架构、数据管理(数据治理)、传统数据库软件等技术领域展开深入探讨,并将邀请一批国内顶尖的技术专家来进行分享。本届大会将在保留数据库软件应用实践这一传统主题的基础上,向大数据、数据结构、数据治理与分析、商业智能等领域进行拓展,以满足于广大从业人士和行业用户的迫切需要。
自2010年以来,国内领先的IT专业网站IT168联合旗下ITPUB、ChinaUnix技术社区已经连续举办了三届数据库技术大会,每届大会超过千人规模,云集了国内技术水平最高的数据架构师、DBA、数据库开发工程师、研发总监、IT经理等,是目前国内最受欢迎的数据库技术盛会。
今天是数据库大会的第二天,下午的专场6:SQL Server架构与优化,SQLServer专家王成辉:windbi给我们带来了《利用 XEvent进行高级Troubleshooting 》的精彩主题演讲,今年也是第二年参加数据库大会。本文是对该演讲内容概要,如需PPT下载敬请期待官网消息。
本次演讲主要介绍SQLServer扩展事件(Extended Events,简称XEvent),理解扩展事件架构,使用扩展事件对SQLServer进行Troubleshooting。扩展事件显著地减少诊断和解决问题的时间。扩展事件可深度地揭示SQLServer的内幕。
王成辉认为,数据库从业人员不要以工作的方式来对待自己的工作,而是要做有想象力和创造力的技术,用意想不到的方法解决工作中的实际问题。过去在京东平均5分钟优化一条SQL语句,后来到了京东618促销的时候服务器没有宕机,也是京东8年来唯一一次没有宕机。做了优化之后,服务器的数量逐步减少数量但是也没有宕机。去年7月份到了新公司,做数据分析的公司。除了做数据分析之外,其他和SQL相关的优化。
什么是扩展事件?
事件:显示某事发生的软件信息,比如单击(wikipedia)
扩展事件:在数据库引擎里边,当某些事件(比如死锁)发生时产生一些信息,用来捕获这些信息的一个新的机制,就是扩展事件。
扩展事件的特点:轻量级、高性能、更少系统资源;高扩展性高可配置性;更准确,更多的计数器;支持trace所有的计数器;更底层更细粒度。
王成辉介绍了一个之前的案例:两个不相干的表引起死锁问题,后来通过扩展事件解决了死锁的问题。扩展事件可以跟踪时间点,跟踪数据库备份。backup的第一步是什么,第二步会做什么等等。通过扩展事件可以非常清晰的揭示内部问题。比如可以用扩展事件揭示日志文件的操作过程。
可扩展性:扩展事件是一个平台,加载一些DLL文件,如果掌握了机制之后可以自己编写DLL文件。
扩展事件的架构
▲扩展事件的架构
Event Session 工作原理
▲Event Session 工作原理
扩展事件的对象
1、扩展事件的对象:Package。
包是一个容器:包含Event、Target、Action、Predicate、Type、Map,同时各包之间的对象可以混合使用;每个包都有GUID和名称;包在模块载入的时候注册; Sys.dm_xe_packages
▲代码示意
2、扩展事件的对象:Event
事件对应数据库引擎里某件事情发生的代码执行路径里的特定的点;所有事件都是同步执行的;每个事件都都包含一组字段称作payload,它是事件默认收集的数据。事件可以按照channel和keyword来进行分类,与ETW分类相同,所以可以与ETW进行集成;sys.dm_xe_objects、sys.dm_xe_object_columns
3、扩展事件的对象:Action
Action是事件触发时候可以执行的一些特定的命令或任务(可以做到:收集额外的信息,捕获堆dump文件和检查数据,汇总事务数据,存储变量的本地上下文状态信息,停止服务器执行,创建调试断点); 与事件是同步执行的,所以可能对性能有影响;可以和任何事件关联;sys.dm_xe_objects
4、扩展事件的对象:Target
Target是事件的数据存储的地方(内存或文件、同步或异步);可以有多个Target;sys.dm_xe_objects
▲代码示意
5、扩展事件的对象:Predicate
Predicate动态过滤事件;与事件同步发生;每个事件可以使用不同的Predicate;它是一个布尔表达式,支持短路;Predicate可以在本地上下文的payload进行过滤,也可以在一些全局状态信息上过滤;要求数据类型一致;有一些predicate可以存储状态信息以便允许事件每隔多少次执行一次或者只执行多少次,可用于抽样;sys.dm_xe_objects
6、扩展事件的对象:Type&Map
Type定义了事件的信息元素即payload的数据类型;Map是一个key/value形式的字典表,它把一些数字映射成用户能看得懂的文本;二者都不用于事件会话定义的一部分。