sql server deadlock跟踪的4种实现方法

数据库 发布日期:2024/11/12 浏览次数:1

正在浏览:sql server deadlock跟踪的4种实现方法

前言

最近写程序常会遇到deadlock victim,每次一脸懵逼。研究了下怎么跟踪,写下来记录下。文中介绍的非常详细,对大家具有一定的参考学习价值,下面话不多说了,来一起看看详细的介绍吧

建测试数据

CREATE DATABASE testdb;
 
GO
 
USE testdb;
 
CREATE TABLE table1
(
id INT IDENTITY PRIMARY KEY,
student_name NVARCHAR(50)
 
)
 
INSERT INTO table1 values ('James')
INSERT INTO table1 values ('Andy')
INSERT INTO table1 values ('Sal')
INSERT INTO table1 values ('Helen')
INSERT INTO table1 values ('Jo')
INSERT INTO table1 values ('Wik')
 
 
CREATE TABLE table2
(
id INT IDENTITY PRIMARY KEY,
student_name NVARCHAR(50)
 
)
 
INSERT INTO table2 values ('Alan')
INSERT INTO table2 values ('Rik')
INSERT INTO table2 values ('Jack')
INSERT INTO table2 values ('Mark')
INSERT INTO table2 values ('Josh')
INSERT INTO table2 values ('Fred')

第一段sql,先运行只更新table1部分

USE testdb;
 
-- Transaction1
BEGIN TRAN
 
UPDATE table1
SET student_name = student_name + 'Transaction1'
WHERE id IN (1,2,3,4,5)
 
UPDATE table2
SET student_name = student_name + 'Transaction1'
WHERE id = 1
 
COMMIT TRANSACTION

第二段sql,只运行更新table2部分

USE testdb;
 
-- Transaction2
BEGIN TRAN
 
UPDATE table2
SET student_name = student_name + 'Transaction2'
WHERE id = 1
 
UPDATE table1
SET student_name = student_name + 'Transaction2'
WHERE id IN (1,2,3,4,5)
 
COMMIT TRANSACTION

再运行,第一段sql更新table2,运行第二段sql更新table1,死锁问题重现。

sql server deadlock跟踪的4种实现方法

说下跟踪死锁的方法:

1.使用trace log跟踪,执行如下sql开启1222和1204 flag,死锁信息会在sql server 日志中输出。

DBCC TRACEON (1204, -1)
DBCC TRACEON (1222, -1)

下图是1204输出的信息

sql server deadlock跟踪的4种实现方法

下图是1222输出的信息

sql server deadlock跟踪的4种实现方法

2.使用sql server profiler进行跟踪

点击Tools -> sql server profiler 选择sql locks模板

sql server deadlock跟踪的4种实现方法

运行当发生死锁时会自动捕获,点击dead lock paragraph查看死锁

sql server deadlock跟踪的4种实现方法

3.使用扩展事件跟踪,方法只适用于sql server 2012版本,08r2版本无法直接使用。

依次点击Management -> Extended Events - >system health - >package0.event_file

sql server deadlock跟踪的4种实现方法

输入deadlock回车,可以点击details 把内容另存为xdl文件再打开,或点击deadlock查看图

sql server deadlock跟踪的4种实现方法

4.使用windows性能计数器检测到死锁再去sql中查询

命令行输入:perfmon 或者 perfmon /sys

选择实例:SQL Server :Locks \\ Number of DeadLocks/sec \\ _Total

实时查看:

sql server deadlock跟踪的4种实现方法

下面的查询提供了自从上次重启以来在本服务器上发生的所有死锁:

SELECT cntr_value AS NumOfDeadLocks

FROM sys.dm_os_performance_counters

WHERE object_name = 'SQLServer:Locks'

AND counter_name = 'Number of Deadlocks/sec'

AND instance_name = '_Total'

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?