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

简介:

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

 

创建扩展事件会话

展开“Object Explorer”、“Management”、“Extended Events”、“Sessions”目录,你会发现一到两个预设的会话。默认,在SQL Server 2012包含system_health会话,而根据不同的SQL Server2012的版本,可能有AlwaysOn_health会话。你可以在空闲时检查这些会话,现在,我们来创建一个会话来更好的理解扩展事件是如何工作的。每个会话包含了相同的基础组件。

 

可以通过右键“Sessions”的“New Session Wizard”向导来创建会话,也可以通过T-SQL来创建。这里我们通过右键“Session”的“New Session”,在“General”页,输入会话的名字Check Queries。在这页可以不必配置任何选项,如果没有必要。在“Template”下拉菜单的 “Query Detail Sampling”模板捕获关于T-SQL语句、存储过程和批处理的事件数据。你可以修改预设设置,例如添加或删除事件,或者使用模板设置的配置项。一旦你保存了会话,你就不能使用正在被使用的模板,但你可以按需修改属性设置。

 

clip_image001

 

“General”页的大部分选项都是很明确的。唯一一个不太清晰的的选项是“Casualty tracking”下的“Track how events are related to one another”选项,让你在相关任务之间跟踪事件,当一个任务的工作被另一个做了的时候。

 

这里,我们只输入会话的名称,进入到“Events”页去选择你想监控的事件。

 

clip_image002

 

如果你在“Event library”内选择一个事件,下面会显示它的描述信息。以及相关的事件域的列表。我们添加query_post_execution_showplan和sql_statement_completed事件。

 

clip_image003

 

直接点OK保存。

 

右键点击新建的会话,选择“Start Session”,再次右键点击该会话,选择“Watch Live Data”。运行如下的查询:

 

1
2
3
4
5
6
7
8
9
10
USE AdventureWorks2012
GO
SELECT  FROM  Production.TransactionHistory
ORDER  BY  TransactionDate  DESC , ReferenceOrderID, ReferenceOrderLineID;
SELECT  FROM  Person.Person
WHERE  BusinessEntityID <> 100
OR  BusinessEntityID <> 200
ORDER  BY  PersonType, Lastname, FirstName;
SELECT  FROM  Sales.Currency
ORDER  BY  Name ;

 

结果显示如下:

 

clip_image004

 

该会话对于刚才运行的每一条语句都记录了一个sql_statement_completed事件,每个语句一个query_post_execution_showplan事件,和大量与SQL Server管理相关的query_post_execution_showplan事件。

 

对于query_post_execution_showplan事件,可以看到像duration、estimated_rows和showplan_xml。如果你双击showplan_xml值,该XML将会在新的窗口打开,更具可读性。

 

clip_image005

 

当双击statement的值时,将弹出详细的触发该事件的语句。

 

clip_image006

 

尽管我们只添加了两个事件到我们的会话,我们仍然收到了大量的信息。我们需要添加过滤条件限制返回我们感兴趣的事件。

 

添加过滤条件到会话

过滤条件限制了返回基于特定准则的会话的数量。在添加过滤条件到会话前,先关闭“Live Data”窗口。然后在“Object Explorer”,右键点击该会话选择“Properties”,在“Session Properties”对话框,进入“Events”页点击“Configure”按钮。出现一个让你选择配置过滤条件的域的屏幕。进入到“Filter(Predicate)”窗口,在“Selected events”选择“query_post_execution_showplan”事件。

 

我们对query_post_execution_showplan事件添加了两个过滤条件。第一个过滤条件,针对duration域,大于(>)操作符,值为500000。该事件将返回执行时间大于500000微秒的会话。

 

另一个过滤条件,source_database_id必需等于5,在我的测试环境,AdventureWorks2012数据库的ID为5。我添加该过滤条件,使得该会话只包含与这个数据库相关的query_post_execution_showplan事件。

 

clip_image007[4]

 

再针对sql_statement_completed事件,在duration域,我们添加了相同的过滤条件。

 

clip_image008[4]

 

过滤条件配置完后,点击“OK”关闭会话属性对话框。右键点击“Object Explorer”,选择“Watch Live Data”。再次运行刚才的语句,只有一条语句返回了事件。

 

clip_image009

 

因为只有一条SELECT语句超过了500000微秒。所以,会话只包含一个sql_statement_completed事件和一个query_post_execution_showplan事件。

 

添加域到会话

先关掉“Live Data”窗口,再次打开会话的属性。进入“Events”页点击“Configure”。进入“Global Fields(Actions)”窗口。在全局域,像database_id和database_name域是对多个事件可用。一直以来,添加一个或多个域到事件中用来提供有用的信息。例如,有时候可能去知道哪个query_post_execution_showplan事件与哪个sql_statement_completed事件在结果中是相关的,这比较困难。如果我们添加transaction_id域到每个事件,这就可以更好的关联这些事件。

 

选择“Selected events”中的query_post_execution_showplan事件,在全局域中选择transaction_id域。

 

clip_image010

 

进入“Event Fields”窗口,选择“database_name”域。注意,有些在全局域中列出的域,也会包含在事件域中,像database_name域。

 

clip_image011

 

不论域是在哪里列出的,记住只要你只需要添加必要的域,因为任何你添加的组件都会增加负载。当然,我们不必添加database_name域到这个事件,因为我们的过滤条件只返回针对一个数据库的事件。然后,在这里包含数据库名只是为了解释可选的事件域是如何工作的。

 

现在再针对sql_statement_completed事件重复上述操作,在全局域,选择database_name和transaction_id域。

 

clip_image012

 

现在进入sql_statement_completed事件相关的“Event Field”窗口。你可以选择包含parameterized_plan_handle域和statement域。默认情况下,第一个没有选择,第二个被选择。这里,我们保持默认设置。点击“OK”保存会话关闭会话属性对话框。

 

接下来,打开“Live Data”窗口,运行上述查询。将会看到更详细的信息,点击query_post_execution_showplan事件,可以看到包含数据库名和事务ID,在这里是630312。

 

clip_image013

 

点击sql_statement_completed,也显示了事务ID为630312,以及数据库名。

 

clip_image014

 

可以看到,添加的信息可以帮助我们更好的理解数据的来源,以及这些片段之间的关系。

 

保存会话数据

再次关闭“Live Data”窗口,打开会话属性,进入“Data Storage”页,里面可以选择要保存的格式。

 

SQL Server提供了多种格式来保存会话事件:

l Etw_classic_sync_target:输出事件以Event Tracing for Windows(ETW)格式。

l Event_counter:输出事件到内存记录会话中跟踪事件触发的次数。

l Event_file:输出事件到磁盘上的一个目录的文件。

l Histogram:输出事件到内存基于域和行动分组计数事件。

l Pair_matching:输出事件到内存跟踪基于目标配置没有对应事件的事件。

l Ring_buffer:输出事件到内存跟踪基于目标配置的一定量的事件数据。

 

当选择一种数据存储类型,将会在页面底部有一些选项可供配置如何保存数据。这里,我们选择event_file类型,配置为最大文件为200MB,最大文件数量为10个。点击“OK”保存。

 

clip_image015[4]

 

再次运行上述查询。在SSMS中展开该会话,会看到一个该事件文件的的参照package0.evnet_file,双击该节点。将会打开一个新窗口显示捕获的数据,类似在“Live Data”中显示的。

 

clip_image016

 

当查看完该文件的内容后,关闭该窗口。并右键选择该会话,选择“Stop Session”。当你想再次捕获数据的时候,你再开启。














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





相关文章
|
SQL 开发框架 .NET
突破T-SQL限制:利用CLR集成扩展RDS SQL Server的功能边界
CLR集成为SQL Server提供了强大的扩展能力,突破了T-SQL的限制,极大地拓展了SQL 的应用场景,如:复杂字符串处理、高性能计算、图像处理、机器学习集成、自定义加密解密等,使开发人员能够利用 .NET Framework的丰富功能来处理复杂的数据库任务。
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
SQL 存储 数据挖掘
SQL Server 日期格式查询详解
SQL Server 日期格式查询详解
1874 2
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
SQL 存储 安全
Play Framework的安全面纱:揭开隐藏在优雅代码下的威胁
【8月更文挑战第31天】Play Framework 是一款高效、轻量级的 Web 开发框架,内置多种安全特性,助力开发者构建安全稳定的应用。本文详细介绍 Play 如何防范 SQL 注入、XSS 攻击、CSRF 攻击,并提供安全的密码存储方法及权限管理策略,通过具体示例代码展示实施步骤,助您有效抵御常见威胁。
251 1
|
SQL Java 数据库连接
JDBC连接SQL Server2008 完成增加、删除、查询、修改等基本信息基本格式及示例代码
这篇文章提供了使用JDBC连接SQL Server 2008数据库进行增加、删除、查询和修改操作的基本步骤和示例代码。
|
SQL 存储 开发框架
Entity Framework Core 与 SQL Server 携手,高级查询技巧大揭秘!让你的数据操作更高效!
【8月更文挑战第31天】Entity Framework Core (EF Core) 是一个强大的对象关系映射(ORM)框架,尤其与 SQL Server 数据库结合使用时,提供了多种高级查询技巧,显著提升数据操作效率。它支持 LINQ 查询,使代码简洁易读;延迟加载与预先加载机制优化了相关实体的加载策略;通过 `FromSqlRaw` 或 `FromSqlInterpolated` 方法支持原始 SQL 查询;可调用存储过程执行复杂任务;利用 `Skip` 和 `Take` 实现分页查询,便于处理大量数据。这些特性共同提升了开发者的生产力和应用程序的性能。
714 0
|
SQL 存储 测试技术
SQL Server 查询超时问题排查
【8月更文挑战第14天】遇到SQL Server查询超时,先检查查询复杂度与索引使用;审视服务器CPU、内存及磁盘I/O负载;审查SQL Server配置与超时设置;检测锁和阻塞状况;最后审查应用代码与网络环境。每步定位问题根源,针对性优化以提升查询效率。务必先行备份并在测试环境验证改动。
1315 0
|
SQL 存储 关系型数据库
SQL SERVER 查询所有表 统计每张表的大小
SQL SERVER 查询所有表 统计每张表的大小
472 0
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1359 152

热门文章

最新文章