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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话。然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪。

 

步骤1:

通过“Object Explorer”连接到实例,展开“Management”、“Extended Events”、“Sessions”。

 

clip_image001

 

步骤2:

右键点击“Sessions”,创建一个新的会话向导。

 

步骤3:

输入会话名称“Deadlock_Monitor”,点击下一步。

 

clip_image002

 

步骤4:

选择不使用模板(像SQL Server Profiler模板一样,预设了一些默认选项一起启动,但没有一个满足我们需求的模板),点击下一步。

 

clip_image003

 

步骤5:

选择要捕获的事件,在“Event library”输入deadlock,可看到如下图所示:

 

clip_image004

 

步骤6:

选择“xml_deadlock_report”,添加到右侧选择的事件列表中。再单击下一步。

 

clip_image005

 

步骤7:

选择要捕获的列,这里我们选择下一步。

 

clip_image006

 

步骤8:

定义过滤条件,这里我们忽略这个设置,点击下一步。

 

clip_image007

 

步骤9:

选择保存数据到文件,设置文件路径和最大值等。点击下一步。

 

clip_image008

 

步骤10:

检查所有的配置,点击完成来安装和启用会话。

 

clip_image009

 

步骤11:

现在我们可以启动捕获,并查看活动数据。

 

clip_image010

 

步骤12:

在刚才创建会话“Deadlock_Monitor”上右键点击生成脚本。

 

1
2
3
4
5
CREATE  EVENT SESSION [Deadlock_Monitor]  ON  SERVER
ADD  EVENT sqlserver.xml_deadlock_report
ADD  TARGET package0.event_file( SET  filename=N 'D:\MSSQL\DATA\MSSQL11.MSSQLSERVER\MSSQL\Log\Deadlock_Monitor.xel' ,max_file_size=(256),max_rollover_files=(10))
WITH  (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY= OFF ,STARTUP_STATE= OFF )
GO

 

步骤13:

在会话“Deadlock_Monitor”上右键选择启动会话。

 

步骤14:

分别在两个查询窗口执行如下语句。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
--Window1
USE AdventureWorks2012
BEGIN  TRAN
UPDATE  Person.Address  SET  AddressLine1 =  'New address'  WHERE  AddressID = 20
WAITFOR DELAY  '0:0:10'
SELECT  FROM  Person.Address  WHERE  AddressID = 25
  
--Window 2
USE AdventureWorks2012
BEGIN  TRAN
UPDATE  Person.Address  SET  AddressLine1 =  'New address'  WHERE  AddressID = 25
WAITFOR DELAY  '0:0:10'
SELECT  FROM  Person.Address  WHERE  AddressID = 20

 

步骤15:

在“Deadlock_Monitor”上的package0.event_file上右键选择“View Target Data…”。选择对应timestamp的死锁条目,在Details的xml_report值里显示的就是死锁的XML文件,可双击打开。点击Deadlock即可看到死锁的图形化展示。

 

clip_image011

 

clip_image012

 

clip_image013

 

深入进阶

 

死锁详细信息还有几个步骤可用来配置扩展事件来监控死锁。

我想去讨论另外两个事件来捕获到分析死锁更详细的信息。

 

1. Lock: Deadlock事件类

这个事件类可以用来验证死锁牺牲品。这个事件说明什么时候请求需要一个锁,但被取消作为一个死锁牺牲品。

 

2. Lock: Deadlock chain事件类

这个事件类用于监控死锁状态。当有一个死锁时该事件被触发。通过在实例级别监控这个事件,我们能够识别那些对象在死锁中,我们是否在应用程序中有死锁导致的性能问题。

 

步骤1:

在之前的“Deadlock_Monitor”会话上右键选择“Properties”。选择“Events”页,将lock_deadlock和lock_deadlock_chain事件类添加到右侧已选择事件列表。

 

clip_image014

 

步骤2:

运行之前的死锁示例。

 

步骤3:

在“Deadlock_Monitor”上的package0.event_file上右键选择“View Target Data…”。选择对应timestamp的死锁条目。

 

clip_image015

 

clip_image016

 

如果有用户反馈说他们在应用程序的错误日志里发现了输出了死锁信息,而且是在深夜。我们就可以知道怎么监控和获取死锁数据了。


















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

相关实践学习
使用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
相关文章
|
2月前
|
SQL 开发框架 .NET
突破T-SQL限制:利用CLR集成扩展RDS SQL Server的功能边界
CLR集成为SQL Server提供了强大的扩展能力,突破了T-SQL的限制,极大地拓展了SQL 的应用场景,如:复杂字符串处理、高性能计算、图像处理、机器学习集成、自定义加密解密等,使开发人员能够利用 .NET Framework的丰富功能来处理复杂的数据库任务。
|
4月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
8月前
|
SQL
sqlserver死锁排查
sqlserver死锁排查
153 0
|
8月前
|
SQL 监控 关系型数据库
解密SQL性能异常事件及阿里云数据库的性能调优实践
作为开发者想必都知道数据库是现代应用的核心组件之一,而且在当今互联网时代之下,SQL查询的性能直接影响系统的整体性能,它的性能对于系统的稳定性和响应速度至关重要。那么本文就来讨论一下SQL性能异常的排查和优化方法,包括我个人印象深刻的SQL性能异常事件,以及分享一下使用阿里云数据库产品/工具进行SQL性能调优的经验和心得体会。
213 1
解密SQL性能异常事件及阿里云数据库的性能调优实践
|
8月前
|
SQL 分布式计算 测试技术
使用UDF扩展Spark SQL
使用UDF扩展Spark SQL
|
8月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
106 0
|
8月前
|
SQL 关系型数据库 数据库
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
243 0
|
8月前
|
SQL 关系型数据库 编译器
PostgreSQL SQL扩展 ---- C语言函数(二)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
8月前
|
SQL 存储 Kubernetes
对 K8s 异常事件的定时 SQL 分析
K8s 是基于状态机的设计,在不同状态之间迁移时会生成事件。正常的状态间转换会生成 Normal 事件,从正常状态转换为异常状态则会生成 Warning 事件。使用 K8s 集群,我们关注业务、容器、集群三个层面稳定性,最基础的依赖是 K8s node 要稳定。可能影响 pod 运行的节点问题包括:...
113 0
对 K8s 异常事件的定时 SQL 分析
|
存储 SQL 程序员
【Sql Server】存储过程通过作业定时执行按天统计记录
通过前两篇文章的学习,我们已经对创建表、存储过程、作业等功能点有所了解 本次将结合前面所学习的知识点,创建统计表以及结合作业定时按天以及实时统计域名各个长度的记录值
412 0
【Sql Server】存储过程通过作业定时执行按天统计记录