1. 设置 XEvents 会话以收集死锁

1.1 扩展事件-会话-右键新建会话向导

1.2 设置会话名称

1.3 选择要捕获的事件

database_xml_deadlock_report

1.4 捕获全局字段

1.5 指定会话存储

1.6 结束

1.7 确保启动会话

2. 制造死锁

2.1 准备数据表及数据

2.1.1 准备数据库

TestBug

2.1.2 创建表

-- TestBug.dbo.Product definition-- Drop table-- DROP TABLE TestBug.dbo.Product;CREATE TABLE TestBug.dbo.Product (Id bigint NOT NULL,Name nvarchar(50) COLLATE Chinese_PRC_CI_AS NOT NULL,Color nvarchar(50) COLLATE Chinese_PRC_CI_AS NOT NULL,CreateTime datetime NOT NULL,UpdateTime datetime NOT NULL,CONSTRAINT PK_Product PRIMARY KEY (Id)
);
-- TestBug.dbo.ProductDescription definition-- Drop table-- DROP TABLE TestBug.dbo.ProductDescription;CREATE TABLE TestBug.dbo.ProductDescription (Id bigint NOT NULL,ProductId bigint NOT NULL,Description nvarchar(500) COLLATE Chinese_PRC_CI_AS NOT NULL,CreateTime datetime NOT NULL,UpdateTime datetime NOT NULL,CONSTRAINT PK_ProductDescription PRIMARY KEY (Id)
);

2.1.3 添加数据

INSERTINTOTestBug.dbo.Product (Id,Name,Color,CreateTime,UpdateTime)
VALUES(10001,
N'IPAD',
N'Red',
'2022-11-26 00:00:00.0',
'2022-11-26 20:34:25.46'),(10002,
N'Mac',
N'White',
'2022-11-26 00:00:00.0',
'2022-11-26 00:00:00.0');INSERTINTOTestBug.dbo.ProductDescription (Id,ProductId,Description,CreateTime,UpdateTime)
VALUES(20001,
10001,
N'红色的IPAD',
'2022-11-26 00:00:00.0',
'2022-11-26 20:34:34.537'),(20002,
10002,
N'白色的Mac电脑',
'2022-11-26 00:00:00.0',
'2022-11-26 00:00:00.0');

2.2 模拟死锁过程

2.2.1 死锁会话脚本A

BeginTransactionUPDATEProduct
setUpdateTime = GETDATE()
WHEREColor = 'Red';UPDATEProductDescription
setUpdateTime = GETDATE()
FROMProductDescription as pd
join Product as p onpd.ProductId = p.Id
WHEREp.Color = 'Red';commit transaction;

2.2.2 死锁会话脚本B

UPDATEProductDescription
setUpdateTime = GETDATE()
FROMProductDescription as pd
join Product as p onpd.ProductId = p.Id
WHEREp.Color = 'Red';

2.2.3 步骤 1——新建查询会话A

执行如下脚本

BeginTransactionUPDATEProduct
setUpdateTime = GETDATE()
WHEREColor = 'Red';

2.2.4 步骤 2——新建查询会话B

执行如下脚本

UPDATEProductDescription
setUpdateTime = GETDATE()
FROMProductDescription as pd
join Product as p onpd.ProductId = p.Id
WHEREp.Color = 'Red';

2.2.5 步骤 3——回到查询会话A

执行如下脚本

UPDATEProductDescription
setUpdateTime = GETDATE()
FROMProductDescription as pd
join Product as p onpd.ProductId = p.Id
WHEREp.Color = 'Red';

2.2.6 步骤 4——回到查询会话B

死锁已经产生

2.2.7 步骤 5——再回到查询会话A

提交事务

commit transaction;

2.2.8 步骤 6——结束

3. 查看死锁

3.1 选择-检测死锁-查看目标数据

3.2 双击查看xml_report

3.3 保存为 xdl文件,然后关闭上一步打开的 XML 页

3.4 双击打开 或者 直接拖动到SSMS打开

3.5 查看死锁图

3.6 结束

参考

https://learn.microsoft.com/zh-cn/azure/azure-sql/database/analyze-prevent-deadlocks?view=azuresql&tabs=ring-buffer

https://learn.microsoft.com/zh-cn/sql/relational-databases/extended-events/quick-start-extended-events-in-sql-server?view=sql-server-ver16

SQL Server DeadLock 分析相关推荐

  1. Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出

    Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出 一:MS SQL Report Server 报表的制作. 1.打开Microsoft Visual Studio 20 ...

  2. 详解SQL Server Profiler分析死锁几大步骤

    在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如, 进程process1对table1持有1个排它锁(X),同时process1对table2请求1个 ...

  3. sql server性能分析--执行sql次数和逻辑次数

    目前在做一个项目优化时,想通过数据库层分析sql server系统性能,查了一下网上代码,修改了一下标题和DMVs代码,以下代码可以用来分析系统运行一段时间后,那些语句是系统忙的sql语句.做为参考. ...

  4. [原创]C#应用访问Microsoft SQL Server 2005分析服务

    接上次建立的多维数据集 一.前言 1.运行环境 Windows 2003 Server Enterprise Edition with Service Pack 1 Microsoft SQL Ser ...

  5. sql server 性能分析工具

    ReadTrace 在sql server中有一个profiler的工具用于追踪sql server的执行过程,可以监控sql server的的所有过程.假如我们使用SSMS来操作sql server ...

  6. 如何在SQL Server中分析存储子系统性能

    介绍 (Introduction) To improve performance, it is common for DBAs to search in each aspect except anal ...

  7. SQL Server Performance 分析

    对网络上的一篇博客做下笔记,适当扩展下对 Performance 各个涉及到的要素.这篇文章讲的是分析性能,老外写的: How to analyse SQL Server performance 主要 ...

  8. 基于sys.fn_dblog()的SQL Server日志分析

    Github URL: https://github.com/ap0405140/MSSQLLogAnalyzer 在SQL Server 2005及之前的版本, 可以用Log Explorer工具来 ...

  9. SQL Server timeout分析和总结

    我们从数据库实例的角度出发,它会收到来自Web端的访问.用户的直接访问,它也可能同时访问其他数据库实例.那么,连接就分为传入连接(Incoming connection)访问和传出连接(Outgoin ...

最新文章

  1. SDN架构的本质属性—Vecloud
  2. mfc制作登录界面mysql_MFC制作漂亮界面之登录界面
  3. 熟知的CRM有哪些功能特点?
  4. 涨姿势,图文带你了解 8 大排序算法
  5. ES6 = 函数参数
  6. .net mysql 测试连接数据库连接,C#.NET连接mysql方法
  7. Scala具体解释---------数组、元组、映射
  8. 处女作:《游戏AI程序设计实战》2019.4.1
  9. 公众平台服务号、订阅号、企业微信、小程序的区别
  10. odac oracle效率差,垃圾,奇慢 ORACLE ODAC
  11. _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringB5cxx11Ev
  12. ps4如何设置虚拟服务器,PS5官方使用指南 账号设置/PS4传输数据/调整主机设定
  13. teablue数据分析_京东消费者数据分析
  14. 壮游奇迹哪个服务器稳定,壮游奇迹MU官方选哪个区好呢?
  15. Double Check形式的单例模式
  16. k8s - service
  17. 在无处落脚的大海,你就是我的岛屿
  18. agios插件之监控AEP主机InBound和Awaiting数量
  19. python-3d绘图包VPython
  20. 【网络经济与企业管理】主观题汇总

热门文章

  1. 杭电OJ 1013 数字根源
  2. 详解eNSP中Trunk端口和Access端口收发数据的区别
  3. 一元域名-真实的谎言
  4. 初,中高级宏观经济学区别和联系
  5. Low Latency HLS的实现优化
  6. Kony集成百度推送-IOS
  7. Apache Hadoop YARN:另一个资源协调者
  8. C语言变量常量和标识符
  9. 保姆级教程:如何搭建一个专属云平台?
  10. 原版蓝光光盘加国语配音加中文字幕及解说字幕保留弹出菜单傻瓜版教程