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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

下图描述了扩展事件中引入的几个新概念:

 

image

 

事件

 

事件是指代码中定义的点。此类示例包括:T-SQL 语句完成执行时的点或结束获取锁定时的点。每个事件都有一个定义的负载(该事件返回的列的集合),它是使用 ETW 模型(其中每个事件都返回一个通道和关键字作为负载的一部分)来定义的,以便能够与 ETW 集成。SQL Server 2008 最初提供 254 个定义的事件,预计在今后还会增加。

 

使用下列代码可以查看这些定义事件的列表:

 

1
2
3
4
5
SELECT  xp.[ name ], xo.*
FROM  sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE  xp.[guid] = xo.[package_guid]
AND  xo.[object_type] =  'event'
ORDER  BY  xp.[ name ];

 

使用下列代码可以查找某个特定事件的负载:

 

1
2
3
SELECT  FROM  sys.dm_xe_object_columns
WHERE  [object_name] =  'sql_statement_completed' ;
GO

 

谓词

 

谓词是指在事件消耗前利用一组逻辑规则来筛选事件的方法。谓词可以很简单,如检查事件负载中的其中一个返回列是否为某个特定值(例如,通过对象 ID 来筛选“锁定-获得”事件)。

它们还具有一些高级功能,如统计会话期间某个特定事件发生的次数、仅允许事件在发生一次后消耗,或者动态更新谓词本身以抑制包含类似数据的事件的消耗。

 

谓词可以使用布尔逻辑来编写,以使其能够尽可能走捷径。这使得只需执行最少数量的同步处理即可确定是否需要消耗事件。

 

动作

 

动作是指在消耗某个事件前同步执行的一组命令。任何动作都可以被链接到任何事件。它们通常会收集大量数据并追加到事件负载中(如 T-SQL 堆栈或查询执行计划)或执行某个被追加到事件负载中的计算。

 

由于执行这些动作可能需要极高的代价,因此事件的动作仅在所有谓词都计算完毕后才执行,如果在随后确定该事件不会被消耗,则将不会有同步执行某个动作的点。使用下列代码可找到预定义动作的列表:

 

1
2
3
4
5
SELECT  xp.[ name ], xo.*
FROM  sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE  xp.[guid] = xo.[package_guid]
AND  xo.[object_type] =  'action'
ORDER  BY  xp.[ name ];

 

目标

 

目标只提供一种消耗事件的方法,任何目标都可以消耗任何事件(或至少可以在目标空闲时对事件进行处理 — 如获取非审计事件的审计目标)。目标可以同步(例如,触发事件的代码等待该事件被消耗)或异步消耗事件。

 

目标的范围从简单的使用者(如事件文件和环缓冲区)直到能够执行事件配对操作的复杂使用者。使用下列代码可以找到可用目标的列表:

 

1
2
3
4
5
SELECT  xp.[ name ], xo.*
FROM  sys.dm_xe_objects xo, sys.dm_xe_packages xp
WHERE  xp.[guid] = xo.[package_guid]
AND  xo.[object_type] =  'target'
ORDER  BY  xp.[ name ];

 

数据包

 

数据包是一个用于定义扩展事件对象(如事件、动作和目标)的容器。数据包位于它所描述的模块(如可执行程序或 DLL)中。

 

使用扩展事件引擎注册数据包时,它所定义的全部对象都可供使用。

 

会话

 

会话是一种将多个扩展事件对象链接到一起进行处理的方法 -- 事件包含动作,将被目标所消耗。会话可链接任何注册的数据包中的对象,任何数量的会话都可以使用同一个事件、动作等。使用下列代码可查看已定义了哪些扩展事件会话:

 

1
2
SELECT  FROM  sys.dm_xe_sessions;
Go

 

可使用 T-SQL 命令来创建、删除、更改、停止和启动会话。可以想见,这将提供很多灵活性,甚至提供通过对会话本身所捕获的数据进行程序化分析来动态更改会话的功能。




















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1599378 ,如需转载请自行联系原作者



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
8天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
47 10
|
30天前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
132 0
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
2月前
|
SQL 关系型数据库 MySQL
MySQL - 一文解析 SQL 的执行顺序
MySQL - 一文解析 SQL 的执行顺序
|
18天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
16 0
|
8天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
66 6
|
8天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
12天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
14 1
|
25天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
30天前
|
测试技术 数据库 C++
Qt C++拖放事件探索之旅:多方法深入解析
Qt C++拖放事件探索之旅:多方法深入解析
115 1

推荐镜像

更多