SQL Server DeadLock 分析
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 分析相关推荐
- Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出
Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出 一:MS SQL Report Server 报表的制作. 1.打开Microsoft Visual Studio 20 ...
- 详解SQL Server Profiler分析死锁几大步骤
在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如, 进程process1对table1持有1个排它锁(X),同时process1对table2请求1个 ...
- sql server性能分析--执行sql次数和逻辑次数
目前在做一个项目优化时,想通过数据库层分析sql server系统性能,查了一下网上代码,修改了一下标题和DMVs代码,以下代码可以用来分析系统运行一段时间后,那些语句是系统忙的sql语句.做为参考. ...
- [原创]C#应用访问Microsoft SQL Server 2005分析服务
接上次建立的多维数据集 一.前言 1.运行环境 Windows 2003 Server Enterprise Edition with Service Pack 1 Microsoft SQL Ser ...
- sql server 性能分析工具
ReadTrace 在sql server中有一个profiler的工具用于追踪sql server的执行过程,可以监控sql server的的所有过程.假如我们使用SSMS来操作sql server ...
- 如何在SQL Server中分析存储子系统性能
介绍 (Introduction) To improve performance, it is common for DBAs to search in each aspect except anal ...
- SQL Server Performance 分析
对网络上的一篇博客做下笔记,适当扩展下对 Performance 各个涉及到的要素.这篇文章讲的是分析性能,老外写的: How to analyse SQL Server performance 主要 ...
- 基于sys.fn_dblog()的SQL Server日志分析
Github URL: https://github.com/ap0405140/MSSQLLogAnalyzer 在SQL Server 2005及之前的版本, 可以用Log Explorer工具来 ...
- SQL Server timeout分析和总结
我们从数据库实例的角度出发,它会收到来自Web端的访问.用户的直接访问,它也可能同时访问其他数据库实例.那么,连接就分为传入连接(Incoming connection)访问和传出连接(Outgoin ...
最新文章
- SDN架构的本质属性—Vecloud
- mfc制作登录界面mysql_MFC制作漂亮界面之登录界面
- 熟知的CRM有哪些功能特点?
- 涨姿势,图文带你了解 8 大排序算法
- ES6 = 函数参数
- .net mysql 测试连接数据库连接,C#.NET连接mysql方法
- Scala具体解释---------数组、元组、映射
- 处女作:《游戏AI程序设计实战》2019.4.1
- 公众平台服务号、订阅号、企业微信、小程序的区别
- odac oracle效率差,垃圾,奇慢 ORACLE ODAC
- _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringB5cxx11Ev
- ps4如何设置虚拟服务器,PS5官方使用指南 账号设置/PS4传输数据/调整主机设定
- teablue数据分析_京东消费者数据分析
- 壮游奇迹哪个服务器稳定,壮游奇迹MU官方选哪个区好呢?
- Double Check形式的单例模式
- k8s - service
- 在无处落脚的大海,你就是我的岛屿
- agios插件之监控AEP主机InBound和Awaiting数量
- python-3d绘图包VPython
- 【网络经济与企业管理】主观题汇总