SQL Server死锁跟踪常用方法
一、开启 1204或1222事件trace
每次数据库重启后需要重新开启使用trace log跟踪,执行如下sql开启1222和1204 flag,死锁信息会在sql server 日志中输出
DBCC TRACEON(1204,-1)
DBCC TRACEON(1222,-1)
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684423789/image.png)
二、 开启事件探查器跟踪sql profiler
SQLServer Profiler其实是trace的图形界面版,配置好Profiler后可以导出trace的创建脚本,方便批量配置。
保存文件一定要准确保存,很重要,后续研发排查需要使用此跟踪文件进行排查
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1698050750353/image.png)
在【事件选择】页中,展开Locks事件,并选择以下事件:
- Deadlock graph
- Lock:Deadlock
- Lock:Deadlock Chain
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684525226/image.png)
打开TSQL事件,并选择以下事件:
- SQL:StmtCompleted
- SQL:StmtStarting
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684538480/image.png)
点击【列筛选器】,在跟踪属性中,选择数据库名为需要侦测的数据库,这里使用 kims
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684595295/image.png)
点击运行即开始收集。
当死锁发生时,可以看到如下信息
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684638990/image.png)
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684628576/image.png)
点击【Deadlock graph】时,会显示死锁的图像
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684648487/image.png)
可以保存死锁图像,右键然后选择导出事件数据,并另存为xml文件
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684665784/image.png)
下面是其XML格式
![](https://saas.bk-cdn.com/t/df8024d4-aded-4080-99f2-b7f43699077c/u/5b77e823-2c1f-4de4-81e5-556ad3845d35/1685684677916/image.png)