SQL Server 扩展事件

SQL Server 扩展事件(Extended Event)是用于服务器的常规事件处理系统,是追踪SQL Server系统运行状态的神器,同时也是一个日志记录工具,扩展事件完全可以取代SQL追踪(SQL Trace),扩展事件的设计功能:

  • 由于扩展事件引擎不识别事件,因此,引擎可以将任何事件绑定到任何目标,因为引擎不受事件内容约束。
  • 事件与事件使用者不同,后者在扩展事件中称为“目标”(Target),也就是说任何目标可以接收任何事件。此外,引发的任何事件均可供目标自动使用,这样可以记录或提供额外的事件上下文。
  • 事件不同于在事件激发时要执行的操作。因此,任何操作可以与任何事件相关联。
  • 谓词可以动态筛选事件的激发,从而增强了扩展事件基础结构的灵活性。

扩展事件可以同步生成事件数据(并异步处理该数据),这为事件处理提供了灵活的解决方案。此外,扩展事件提供以下功能:

  • 一种跨服务器系统处理事件的统一方法,同时使用户可以隔离特定的事件进行故障排除。
  • 与现有的 ETW 工具集成并支持现有的 ETW 工具。
  • 基于 Transact-SQL 的完全可配置的事件处理机制。
  • 可以动态监视活动进程,同时对这些进程的影响最小。

使用TSQL创建扩展事件的过程比较复杂,但是,我们可以使用另外一种简单的方法:使用扩展时间的创建向导。

一,创建扩展事件的会话

step1,打开新建会话向导(New Session Wizard)

step2,设置会话属性(Set Session Properties)

step3,选择模板(Choose Template)

step4,选项捕获的事件(Select Events to Capture)

该Tab分为两个Pane,左边Pane用于搜索Event,在Event library中,输入需要进行追踪的Event 名称,在选择一个Event之后,Wizard会显示出该Event的Description和 Event Fields,Event fields 是描述Event输出的字段。右边Pane用于列出已经选中的Events 列表。

Step5,选择捕获的字段(Capture Global Fields)

选择Event发生时其他信息,这些信息一般跟Session相关,例如Database_id 和 Database_id 就是Event发生的database 信息。一般会将sql_text也选中,便于查看触发Event的SQL语句。

Step6,设置会话时间的过滤器(Set Session Event Filters)

Step7,指定会话数据的存储(Specify Session Data Storage)

制定输出数据存储的目标(target),该tab中列出 Event File target 和 ring buffer target。

Event File target使用File来存储Session Output,当需要存储大量数据集时,使用该选项。

Ring buffer target使用Memory buffer来存储Session Output,如果分配的memory buffer用完,target会将最老的Events删除,以容纳新的Events,使memory buffers中存储的是most recent data。

Step8,查看扩展事件会话的汇总信息,开始创建事件会话。

二,查看扩展事件捕获的消息

SQL Server 扩展事件捕获的消息,叫做Target,使用Target来存储Events,Target 能够把捕获的消息存储到文件中(扩展名是 .xel),或 memoy buffer 中(Ring Buffer),Target能够以同步或异步方式处理数据,事件的数据都是以XML格式存储。

三,以文件存储Target的数据

Target对于扩展事件产生的数据,总是先缓存在内存buffer中,等到内存buffers积累足够数量的数据之后,再将内存中的所有数据写入到文件中。文件中的数据滞后于内存 buffer,这就是异步写(Async Write),能够减少IO的次数,提高IO效率。事件文件类型的taget的扩展名是xel,以XML格式存储Target 数据,使用 sys.fn_xe_file_target_read_file 函数查看事件文件中存储的数据。

1,以Rollover 方式复用事件文件

事件文件类型的Target 以 rollover 方式复用文件,例如,如果 max_rollover_files=3,那么系统中最多保留 3个 xel文件,文件命名:xxx_0.xel,xxx_1.xel,xxx_2.xel。当文件xxx_0.xel达到Max_File_Size时,Target执行一次rollover,将文件:xxx_0.xel删除,创建新文件:xxx_3.xel,并用该文件存储事件数据。

2,从 sys.dm_xe_session_targets 中查看事件文件的存储路径

select s.name as xe_session_name,
    cast(st.target_data as xml) as target_data
from sys.dm_xe_sessions s
inner join sys.dm_xe_session_targets st
    on s.address=st.event_session_address
where s.name=‘xe_session_name‘

3,从xel文件中检查target的输出

SELECT *, CAST(event_data AS XML) AS ‘event_data_XML‘
FROM sys.fn_xe_file_target_read_file(‘file_name*.xel‘, NULL, NULL, NULL)

四,Ring Buffer Target

Ring buffer target将事件数据保存到内存中,事件数据以XML格式存储。一旦事件数据把分配的内存Buffers 用尽,那么最老的事件数据将被清除。

1,存储模式

ring buffer target简单地把数据存储到内存中,这种target模式能够采用两种模式来管理事件:

  • 第一种模式是严格地先进先出(first-in first-out ,FIFO),也就是说,当分配的内存被target耗尽时,从内存中移除创建时间最早的事件。
  • 第二种模式是per-event 先进先出模式,也就是说,每一种类型的事件都持有一个计数。在这种模式下,当分配的内存被target耗尽时,每个类型中创建时间最早的事件从内存中被移除。

2,从 sys.dm_xe_session_targets 中查看target输出

SELECT name, target_name, CAST(xet.target_data AS xml)
FROM sys.dm_xe_session_targets AS xet
JOIN sys.dm_xe_sessions AS xe
   ON (xe.address = xet.event_session_address)
WHERE xe.name = ‘session_name‘

五,使用SSMS查看Target数据

通过TSQL 脚本获取的Target 输出都是以XML格式显示的,通过View Target Data能够以 表格 方式查看Target的输出

六,查询会话(session)和 target

1,查看扩展事件的Session 配置

select s.name,
    s.total_regular_buffers*s.regular_buffer_size/1024 as total_regular_buffer_kb,
    s.total_buffer_size/1024 as total_buffer_kb,
    s.buffer_policy_desc,
    s.flag_desc,
    s.dropped_event_count,
    s.dropped_buffer_count
from sys.dm_xe_sessions s

字段注释:

Regular buffer:大多数时间下,扩展事件会话使用的是常规的buffer,这些buffer容量大,存储很多事件的信息。特别地,每一个扩展事件会话都会有三个或更多的buffer。常规buffer的分配是由SQL Server决定的,而SQL Server基于 MEMORY_PARTITION_MODE 选项来设置内存分区,常规buffer的size和 MAX_MEMORY选项的设置相同。

buffer_policy_desc:用于表述当buffer耗尽时,扩展事件会话是如何处理新触发的事件:

  • Drop event
  • Do not drop events
  • Drop full buffer
  • Allocate new buffer

2,查看会话target的配置

select s.name as xe_session_name,
    st.target_name,
    st.execution_count,
    st.execution_duration_ms/st.execution_count as avg_execution_ms,
    st.target_data
from sys.dm_xe_session_targets st
inner join sys.dm_xe_sessions s
    on st.event_session_address=s.address

当Target的名称是 event file 时,Session 输出的数据实际上是存储在Event file中。

当Target的名称是 ring buffer时,Session 输出的数据存储在内存 buffers中,通过 sys.dm_xe_session_targets的 target_data 字段查看

参考文档:

SQL Server Extended Events Targets

sys.dm_xe_sessions (Transact-SQL)

sys.dm_xe_session_targets (Transact-SQL)

sys.fn_xe_file_target_read_file (Transact-SQL)

How to Query Extended Events Target XML

Realistic troubleshooting example of extended events (XEvent) usage in SQL Server 2008 – Part 1

Using Xquery to query Extended Events asynchronous file target results

原文地址:https://www.cnblogs.com/ljhdo/p/5657906.html

时间: 2024-11-03 20:10:38

SQL Server 扩展事件的相关文章

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁 我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪. 步骤1: 通过"Object Explorer"连接到实例,展开"Management"."Extended Events"."Sessions". 步骤2: 右键点击"Sess

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪查询语句

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪查询语句 创建扩展事件会话 展开"Object Explorer"."Management"."Extended Events"."Sessions"目录,你会发现一到两个预设的会话.默认,在SQL Server 2012包含system_health会话,而根据不同的SQL Server2012的版本,可能有AlwaysOn_health会话

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析 下图描述了扩展事件中引入的几个新概念: 事件 事件是指代码中定义的点.此类示例包括:T-SQL 语句完成执行时的点或结束获取锁定时的点.每个事件都有一个定义的负载(该事件返回的列的集合),它是使用 ETW 模型(其中每个事件都返回一个通道和关键字作为负载的一部分)来定义的,以便能够与 ETW 集成.SQL Server 2008 最初提供 254 个定义的事件,预计在今后还会增加. 使用下列代码可以查看这些定义

SQL Server扩展事件(Extended Events)-- 性能注意事项

SQL Server扩展事件(Extended Events)-- 性能注意事项 使用 CREATE EVENT SESSION 将扩展事件会话放置在一起时,需要认真正确配置一些设置,因为它们可能会在无意中对性能产生影响.首先需要决定是以同步还是异步方式消耗事件.正如您所料,同步目标对所监控代码的性能产生的影响要大过异步目标. 如前所述,同步消耗某个事件时,触发该事件的代码必须一直等待,直到该事件被消耗为止.显然,如果事件消耗是一个复杂的过程,则这可能会降低代码的性能. 例如,在一个每秒处理数千

SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念

本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事件基础组件,包括事件.谓词.操作和目标.本节,将对扩展事件引擎.架构和基本组件做更加深入的了解.通过这些讲解,可以大概了解到为什么扩展事件相对于SQL Trace来说更加低开销.另外,还会延时如何设计事件会话从而最小化事件收集过程中的不必要开销,即使这些事件会话会很复杂. 事件数据收集生命周期: 扩

SQL Server扩展事件(Extended Events)-- 事件的寿命

SQL Server扩展事件(Extended Events)-- 事件的寿命 定义并启动扩展事件会话后,处理过程将照常进行,直到所监控的代码遇到某个事件为止.下图介绍了扩展事件系统所遵循的步骤. 具体步骤如下: 1. 执行检查以查看是否有任何扩展事件会话正在监控该事件.如果没有,控制权将返给包含该事件的代码,然后继续进行处理. 2. 确定事件的负载,将所需的全部信息都收集到内存中 - 换言之,构建事件的负载. 3. 如果为该事件定义了任何谓词,则执行它们.此时,谓词结果可能是不应消耗该事件.如

SQL Server扩展事件(Extended Events)—使用system_health扩展事件会话

SQL Server扩展事件(Extended Events)-使用system_health扩展事件会话 system_health 会话是 SQL Server 默认包含的扩展事件会话. 该会话在 SQL Server 数据库引擎启动时自动启动,并且运行时不会对性能造成任何明显影响. 该会话收集的系统数据可用于帮助对数据库引擎的性能问题进行故障排除. 因此,我们建议您不要停止或删除该会话. 此会话源自产品支持团队的想法,它可以跟踪通常被用来对客户系统进行调试的信息(例如当客户系统发生死锁或出

SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁

SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁 自SQL Server 2008以后,提供了扩展事件(Extended Events)来跟踪系统分析定位问题.默认的system_health会话一直在运行,可以帮助你更快的定位问题. 运行如下脚本可以看到system_health扩展事件会话: SELECT * FROM sys.dm_xe_sessions 即便是你没有启动任何扩展事件会话,这个查询也会返回一行system

SQL Server扩展事件(Extended Events)-- 体系结构

SQL Server扩展事件(Extended Events)-- 体系结构 MSDN:http://msdn.microsoft.com/zh-cn/library/bb630282%28v=sql.110%29.aspx BLOG:http://blogs.msdn.com/b/extended_events/ SQL Server 扩展事件具有高度可伸缩且高度可配置的体系结构,使用户能够按需收集解决性能问题或确定性能问题所需的信息.扩展事件是使用非常少的性能资源的轻型性能监视系统. 扩展事

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁脚本实现

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁脚本实现 -- Create a new event session (it is better to create a new session and not modify the system's built-in session "system_health"): CREATE EVENT SESSION [Deadlock_Monitor] ON SERVER ADD EVENT sql