SQL Server 扩展事件系列 (1 of 31)

1. SQL Server 扩展事件概述

SQL Server 2008引入了扩展事件(Extended Events),它提供了新的机制收信数据库引擎的内部事件信息,具有高性能或高度可配置性。扩展事件的设计是主要专注于性能,尤其是与SQL Trace比较,开始会感得有点奇怪。但是,当你开始使用扩展事件,你将最有可能的举动是考虑跟踪的问题,并且你会发现扩展事件的强大。如果你还没有使用过扩展事件,这一系列的博文可以帮助你快速学习扩展事件。这篇文章将在较高层面上介绍扩展事件,讲述一些背景知识,后续的章节将基于这些前景知识。

扩展事件引擎

扩展事件引擎为扩展事件上管理对象和资源的中央控制器。引擎管理着负责处理从内存缓冲区到基于会话选项的目标的事件信息的进程池,也就是调度程序。引擎还维护着SQL Server实例已创建的事件会话信息和被引擎内部模块注册过的包的元数据。引擎本身不包括对象元数据。引擎主要是为可以注册的包、可以创建事件会话和有消耗的事件信息提供平台。

(Packages)

包是由扩展事件引擎的模块注册的,包括了模块所包含的扩展事件对象的信息。包是扩展事件内部其它对象元数据的最底层容器。包可以是事件(events)、动作(actions)、目标(targes)、映射(maps)、谓词(predicates)和类型(types)。在SQL Server 2008中,仅仅有四个包:sqlserver、sqlos、package0和一个仅供内部使用的SecAudit,SecAudit是用于服务器审计。sqlservr.exe加载了所有这些包。在Denali CTP1,还有三个额外的包:一个是由sqlserver加载,另外由其它模块加载;sqlclr包是由sqlservr.exe加载,ucs(unified communications stack)包由sqlservr.exe加载。除了这些变化package0和sqlos模块不再由sqlservr.exe加载,而是由sqldk.dll加载。

事件 (Events)

事件提供了包括事件的加载包的执行信息。一个事件和数据引擎内部的一个感兴趣的特定的代码点相对应。在SQL Server 2008中,一共有253个事件可以用来收集之前提到的信息。同时也有很多的事件,并非所有来自SQL Trace的公共事件都是由扩展事件实现。In SQL Server Denali CTP1中,事件增加到446,并且现在包括了所有SQL Trace的相对应的事件。每个事件信息返回对应的事件的特定代码点,我指的是基本信息的有效载荷。基有效载荷中返回的信息的量是由包的元数据中的事件定义所决定,但可以通过使用动作(Event)来添加。

动作 (Actions)

动作是绑定到引擎中事件会话的具体事件,当那个事件发生时,执行指定的任务。事件通常做两种类型的任务,要么收集被加到基础有效负荷额外触发事件的信息、普通全局状态信息,如:session_id, sql_text等等, 要么执行引擎内部的任务,如:插入debug_break或执行内存转储分析。在SQL Server 2008中,有35个动作可以使用。在SQL Server Denali CTP 1中就有43个动作可以使用,包括了Trace列的映射,如context_info, database_name, and event_sequence,这些在SQL Server 2008都是不可用到的。

目标 (Targets)

目标是扩展事件的事件的目的地。多数目标是存储驻留,只有当事件会话是活跃的在实例启动的状态,存在于内存。这些对于短期故障排除可能可用,如果是长期持续的事件就没有必要了。一个文件目标同时存在,类似于SQL Trace中的Trace File,收集的信息存于文件系统,这样就可以被其他人稍后转移到其它地方进行分析。扩展事件有两种类型的目标:具有线程缓冲事件的同步目标;和当缓冲区填满时或超过一个事件的会话定义的最大分发持续时间,由引擎调度器发生的事件的异步目标。后续的章节会讲述具体的目标。

映射(Maps)

映射提供扩展事件内部信息的信息检索。映射提供一个用来定义事件会话和由事件会话收集的相关信息的特定类型的键值对。举个例子:将引擎的键映射为wait_types的逻辑名,SQL Server内部会触发wait_types。

谓词(Predicates)

谓词提供了扩展事件的过滤机制,被定义在具体的事件上,用于控制事件真正触发的情况。扩展事件中的谓词提供了短路开关,意思就是说如果第一个假评估谓词的字符串中终止了评估就会阻止事件触发,这样已定义的谓词评估就具有高性能。事件的基础负荷返回的任何数据可以被定义为谓词,引擎内部的可用全局状态信息也可以被定义为谓词。定义谓词有两种不同的方法,使用常用过虑子句条件,如:<,>, >=, <=, =, <>, LIKE, NOT LIKE,等等。但也可以使用包元数据中所包含的文本比较器定义。当引擎内部的一个会话起动时,任何使用常用过虑子句条件定义的谓词被转换为相应的文本比较方法。

类型(Types)

类型定义了扩展事件内部信息元素的数据类型。在SQL Server 2008中,有29种不同的类型,但是在SQL Server Denali CTP1中只有28种;database_context 类型被移除。除了定义包的类型,一些事件的数据元素将定义数据类型作为映射名字,它提供了数据元素返回信息的类型。

事件会话(Event Sessions)

事件会话是事件的集合,其相应的行动和谓词和目标,这将是被收集的事件的目的地。定义的事件会话中存在扩展事件引擎,直到它们被显式删除会话,允许会话启动,并在需要时停止而不必重新创建会话,即使是重启服务。事件会话有许多配置选项,可以控制会话的功能,包括:服务启动时是否自动启动;事件触发和被分发到目标之间的最大持续时间; 事件会话缓冲的可用内存量;内存如何分区;当缓冲区空间相对调度程序很快被占满时,事件可能丢失时、如果事件丢失了或事件怎么丢失的。并且还有很多。一个事件会话要求最少有一个事件创建,但可以没有目标,允许事件发生的地方,如:不需为损耗实际分发事件发生的内存转储。

What’s next?

弄明白了基本知识,下一章节我们一起研究DMV的元数据,看看如何获得扩展事件对象的信息。想了解更多关于扩展事件的信息,请查看我在MSDN写的白皮书Using SQL Server 2008 Extended Events 。

原文:http://www.sqlskills.com/blogs/jonathan/extended-events-overview/

注:如果有什么地方翻译不妥,欢迎纠正。Thanks!


你可能感兴趣的:(SQL Server 扩展事件系列 (1 of 31))