前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用SQL Server 扩展事件来创建死锁的时间跟踪

使用SQL Server 扩展事件来创建死锁的时间跟踪

作者头像
用户1217611
发布于 2018-01-30 08:38:16
发布于 2018-01-30 08:38:16
1.9K0
举报
文章被收录于专栏:文渊之博文渊之博

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

步骤1:

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

步骤2:

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

步骤3:

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

步骤4:

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

步骤5:

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

步骤6:

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

步骤7:

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

步骤8:

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

步骤9:

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

步骤10:

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

步骤11:

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

步骤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即可看到死锁的图形化展示。

深入进阶

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

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

1. Lock: Deadlock事件类

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

2. Lock: Deadlock chain事件类

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

步骤1:

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

步骤2:

运行之前的死锁示例。

步骤3:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SQL Server 中的死锁检测
从 SQL Server 2012 (11.x) 开始,xml_deadlock_report应使用扩展事件 (xEvent),而不是 SQL 跟踪或 SQL 事件探查器中的死锁图事件类。
保持热爱奔赴山海
2024/01/20
4250
SQLServer中的死锁的介绍
简介 什么是死锁?      我认为,死锁是由于两个对象在拥有一份资源的情况下申请另一份资源,而另一份资源恰好又是这两对象正持有的,导致两对象无法完成操作,且所持资源无法释放。       什么又是阻塞?      阻塞是由于资源不足引起的排队等待现象。比如同时两个进程去更新一个表。      这里我们可以把阻塞作为死锁的必要条件。下面我们先理解一下死锁和阻塞再来看一下我最近遇到一个问题以及解决思路。 SQLServer中的死锁 对应到SQL Server中,当在两个或多个任务中,如果每个任务锁定了其
用户1217611
2018/01/30
1.7K0
SQLServer中的死锁的介绍
SQL Server使用缺失索引建议优化非聚集索引
当查询优化器生成查询计划时,它将分析什么是用于特定筛选条件的最佳索引。 如果不存在最佳索引,查询优化器仍会使用成本最低的可用访问方法生成查询计划,但也会存储有关这些索引的信息。 使用缺失索引功能,你可以访问有关最佳索引的信息以决定是否实现它们。
AiDBA宝典
2024/01/27
2630
SQL Server使用缺失索引建议优化非聚集索引
SQL 扩展事件
    在本篇,我通过使用新建“Session ”对话框来创建新的扩展事件会话。定义一个自己的扩展事件,动作和谓词,并且发布一个以收集事件数据为目的的会话。 首先从UI开始     在SQLServer2008R2以后(不包括2008R2),才引入扩展事件的内置UI。2008的版本可以通过安装插件的形式或者使用T-sql语句来实现扩展事件。如果是2012以后的SSMS客户端,也可以访问2008 的数据库实例,但是看不到扩展事件UI。在2008版本中缺少UI,意味着必须写T-SQL和XQuery来挖掘事件数据
用户1217611
2018/01/30
1K0
SQL 扩展事件
资源等待类型sys.dm_os_wait_stats
动态管理视图  sys.dm_os_wait_stats  返回执行的线程所遇到的所有等待的相关信息。可以使用该聚合视图来诊断 SQL Server 以及特定查询和批处理的性能问题。 列名数据类型说明 wait_type nvarchar(60) 等待类型的名称。 waiting_tasks_count bigint 该等待类型的等待数。该计数器在每开始一个等待时便会增加。 wait_time_ms bigint 该等待类型的总等待时间(毫秒)
欢醉
2018/01/22
1.9K0
运维必备--如何彻底解决数据库的锁超时及死锁问题
之前有介绍过,我主要是做数据仓库运维的,业余也会动手写 python 程序,django 应用,vue 的 app,有兴趣可以加我好友一起学习。最近比较让我头疼的是数据仓库的 datastage 作业经常报 911 错误,最终问题得到了解决,在此总结一下,希望能帮到要解决 911 错误的朋友们。
somenzz
2020/12/10
2.6K0
运维必备--如何彻底解决数据库的锁超时及死锁问题
如何在SQL Server中将表从一个数据库复制到另一个数据库
在某些情况下,作为DBA,您需要将模式和特定表的内容从数据库复制到同一实例中或在不同的SQL实例中,例如从生产数据库中复制特定表到开发人员以进行测试或排除故障。 SQL Server提供了许多方法,可以用来执行表的数据和模式复制过程。为了研究这些方法中的每一个,我们将考虑下面的场景: 托管SQL服务器:localhost。这两个数据库都驻留在同一个SQL Server 2014实例中。 源数据库:AdventureWorks2012。 目标数据库:SQLShackDemo。 将从源数据库复制到目标数据库的表
程序你好
2018/07/20
8.3K0
MS SQL Server事务与并发知多少
  事务是数据库并发控制的基本单位,一条或者一组语句要么全部成功,对数据库中的某些数据成功修改; 要么全部不成功,数据库中的数据还原到这些语句执行之前的样子。
Edison Zhou
2020/02/09
2.3K0
MS SQL Server事务与并发知多少
30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
 以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化。  本系列主要是针对T-SQL的总结。 概述: 本篇主要是对SQL中事务和并发的详细讲解。 一、事务 1.什么是事务 为单个工作单元而执行的一系列操作。如查询、修改数据、修改数据定义。 2.语法 (1)显示定义事务的开始、提交 BEGIN TRAN INSERT INTO b(t1) VALUES(1) INSERT INTO b(t1) VALUES(2) COMMIT TRAN (2)隐式定义 如果不显示定
悟空聊架构
2018/05/18
1.5K0
SQL Server 监控统计阻塞脚本信息
数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大。阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象。 但是阻塞的时间和出现频率要控制在一定的范围内,阻塞持续的时间过长或阻塞出现过多(过于频繁),就会对数据库性能产生严重的影响。
全栈程序员站长
2022/07/05
8170
SQL Server 监控统计阻塞脚本信息
如果正确读取SQL Server中的扩展事件?
    SQL Server中使用扩展事件捕捉所需的信息后,可以选择存放的位置。比如说内存或文件中,但无论存在哪里,其本质都是一个大XML。因此在SQL Server中读取该XML就是解析扩展事件结果的方式。     微软官方或者一些SQL Server论坛提供了使用SQL XML解析扩展事件的脚本,如代码清单1所示。 1: WITH events_cte 2: AS ( SELECT DATEADD(mi, 3:
用户1217611
2018/01/30
1.4K0
SQLSERVER数据库死锁与优化杂谈
当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行;所以,即时去捕捉数据库死锁,是挺不容易的。
Kiba518
2019/03/05
2.2K0
故障分析 | 从 Insert 并发死锁分析 Insert 加锁源码逻辑
即,死锁问题具有业务关联、机制复杂、类型多样等特点,导致当数据库发生死锁问题时,不是那么容易分析。
爱可生开源社区
2023/04/23
1.1K0
SQL Server数据库分区分表
当一个数据表的数据量达到千万级别以后,每次查询都需要消耗大量的时间,所以当表数据量达到一定量级后我们需要对数据表水平切割。水平分区分表就是把逻辑上的一个表,在物理上按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下。这样把一个大的文件拆分成多个小文件,便于我们对数据的管理。
全栈程序员站长
2022/09/06
1.4K0
SQL Server数据库分区分表
Python 并行编程探索线程池与进程池的高效利用
而线程池和进程池则是对线程和进程的一种管理机制,它们可以预先创建一定数量的线程或进程,然后将任务分配给这些线程或进程执行,从而减少了线程或进程的创建和销毁开销,提高了程序的执行效率。
一键难忘
2024/05/07
6780
数据库对象事件与属性统计 | performance_schema全方位介绍
上一篇《事件统计 | performance_schema全方位介绍》详细介绍了performance_schema的事件统计表,但这些统计数据粒度太粗,仅仅按照事件的5大类别+用户、线程等维度进行分类统计,但有时候我们需要从更细粒度的维度进行分类统计,例如:某个表的IO开销多少、锁开销多少、以及用户连接的一些属性统计信息等。此时就需要查看数据库对象事件统计表与属性统计表了。今天将带领大家一起踏上系列第五篇的征程(全系共7个篇章),本期将为大家全面讲解performance_schema中对象事件统计表与属性统计表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧~
沃趣科技
2018/07/02
4.4K0
数据库对象事件与属性统计 | performance_schema全方位介绍
ORACLE常用性能监控SQL【一】
kill session: 执行 alter system kill session ‘761,876’(sid 为 761);
小小工匠
2021/08/16
2.8K0
【QT】事件系统入门——QEvent 基础与示例
事件本身是 操作系统提供的 机制,Qt 也同样把操作系统事件机制进行了封装拿到了 Qt 中,但由于 事件 对应的代码编写起来不方便,因此 Qt 对于事件机制 又进行了进一步的 封装,就得到了 信号槽
IsLand1314
2025/03/14
940
【QT】事件系统入门——QEvent 基础与示例
Oracle通过ODBC连接SQL Server数据库
近期在项目中客户软件升级,旧版本的数据库用的SQL Server而新版本换为了Oracle,其中部分数据需要进来平移,这样我们就需要配置Oracle连接SQL数据库,这篇我们就来看一下Oracle怎么用ODBC的方式来连接SQL Server数据库。
Vaccae
2019/07/25
9.3K0
【翻译】对 SQL Server DBA 有用的五个查询
作为 SQL Server DBA,拥有正确的查询集可以显著简化您的工作流程、增强监控并帮助排除故障。以下是解决常见管理任务的五个基本查询,每个查询都附有详细说明,以帮助您了解其目的、解释结果并采取适当的措施。
保持热爱奔赴山海
2025/01/11
810
相关推荐
SQL Server 中的死锁检测
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文