如何使用工具来追踪死锁错误

矿山施工设备2021年09月06日

SQLDiag最初是在SQL Server 7.0中引入的,它是一个非常方便的工具可以用来监控数据库服务器中出现的问题。这个命令行工具可以为微软的客户提供必需的信息,在运行时,SQLDiag可以将不同的SQL Server工具提供的数据输出到一个文本文件中,以便于您阅览,该文本文件包含了配置、数据库和错误日志的信息。

在SQL Server 2005中,您可以将 SQLDiag作为一个服务运行,也可以将它作为一个命令行工具。在以下的讨论中,我将假定您的机器上运行的是非集群的SQL Server 2000,而我将通过命令行提示符来发出命令。

实战SQLDiag

我觉得实际操作比阅读更容易吸收技术信息,让我们通过一个实例来看看SQLDiag是如何工作的,以及怎样用它让数据库管理员的日子好过些。在这个例子中,我将展示如何捕获造成数据库服务器死锁的语句,并进行研究,然后使用一些技巧性的调整来避免死锁的出现。

如果您对死锁不太熟悉,也不了解它们是怎样对数据库系统造成严重破坏的,可以参考我以前的文章,我可以对死锁做一些简单的解释,以及如何在SQL Server 2005中捕获死锁并重试。

在服务器上捕获死锁信息之前,我必需开启服务器上的一些追踪标记,一个追踪标记是设定在SQL Server 中的一种状态,它可以监测到服务器对非法操作的响应。在这种情况下,我要开启可以监测死锁错误的追踪标记,并在错误发生时将这些信息写入错误日志。为了开启这些追踪标记,请执行以下的命令:(您必需具备SQL Server系统管理员权限来运行DBCC命令)

DBCC TRACEON(1204, -1)

DBCC TRACEON(1205, -1)

DBCC TRACEON(3605, -1)

1204标记将返回死锁时遇到的锁的类型;1205标记则会返回更加详细的信息,它可以记录出现死锁时正在运行的语句;3605标记将把追踪信息发送到错误日志,SQLDiag工具可以将这些信息输出到一个文本文件中。命令中的“-1”参数表示对所有的数据库连接应用追踪标记。

现在系统已经具备捕获死锁的能力了,现在让我们来创造一个死锁的情况,在列表A中,我创建了一些表格来制造死锁。

IF EXISTS(SELECT [name] FROM sysobjects WHERE type = \'U\' AND name = \'DeadlockTable1\')

DROP TABLE DeadlockTable1

市政府秘书长李伟、市政协秘书长周毓秋参加活动。 GO

IF EXISTS(SELECT [name] FROM sysobjects WHERE type = \'U\' AND name = \'DeadlockTable2\')

DROP TABLE DeadlockTable2

GO

CREATE TABLE DeadlockTable1

(

IDCol TINYINT IDENTITY (1,1) PRIMARY KEY,

DeadlockValue1 VARCHAR(20)

)

GO

CREATE TABLE DeadlockTable2

(

IDCol TINYINT IDENTITY (1,1) PRIMARY KEY,

DeadlockValue2 VARCHAR(20)

)

GO

列表A

现在表格已经创建好了,我将在每个表格中插入一行,这样我们就有一个值来更新了,我将使用两条临近的更新语句来造成死锁,如列表B所示:

INSERT INTO DeadlockTable1 (DeadlockValue1)

SELECT \'Deadlock1\'

INSERT INTO DeadlockTable2 (DeadlockValue2)

SELECT \'Deadlock2\'

GO

列表B

这部分很有意思,在以上的代码中,我在每一个表格中都添加了一行更新语句,但是这两条语句又都在互相争夺表资源,最终会造成死锁情况的发生。在此,我将使用两个单独的数据库连接,剪切并粘贴这部分SQL Server代码到一个连接中,我将它命名为连接A,参见列表C,然后,剪切并粘贴这部分SQL Server代码到另外一个连接,我将它命名为连接B,参见列表D。

BEGIN TRANSACTION

UPDATE DeadlockTable2

SET DeadlockValue2 = \'Connection1\'

WAITFOR DELAY \'0:0:3\'

UPDATE DeadlockTable1

SET DeadlockValue1 = \'Connection1\'

COMMIT TRANSACTION

列表C

BEGIN TRANSACTION

UPDATE DeadlockTable1

SET DeadlockValue1 = \'Connection2\'

WAITFOR DELAY \'0:0:6\'

UPDATE DeadlockTable2

SET DeadlockValue2 = \'Connection2\'

COMMIT TRANSACTION

列表D

崇左治疗白癜风哪家医院好
重庆好医院男科
健脾胃的中药有哪些
相关阅读
哪有什么真直男 都是装直男 他发觉你生气了 需要哄 也发觉消息要及时回 也发觉要关心你 给你买喜欢的

哪有什么真直男 都是装直男 他究竟你羞愧了 必须拚命 也究竟消息要及时返...

2023-10-23
恋就是让一个笨手笨脚的小女孩有人照顾 有人惦记 如果让她哭 你算什么男子汉 你算大笨蛋 艾特ta热门

恋人就是让一个笨手笨脚的莎拉有人照顾 有人惦记 如果让她不禁 你唯什么男...

2023-10-02
奥特维(688516.SH)子公司与合盛硅业(603260.SH)原为签订1.3亿元160型单晶炉买

奥特维(688516.SH)紧急通知,公司控股子公司无锡松瓷机电控股(“松瓷机电”)...

2023-09-29
电影明星年轻时照片:张国荣蹲街头看路人打牌,路人似乎没“理睬”他

影星几位时照片:梅艳芳两头游民看红绿灯整天,红绿灯确实没“不对”他 ...

2023-09-22
与终极探险家的强强联合

Glashütte Original特里苏蒂原创与荷兰水手跳远彼得·卡尔终于扬帆驶向 Glashüt...

2023-09-21
杨浦区通报1例全球化面阳性感染者相关情况丨疫情防控新闻发布会

现在(6月15日)下午参加的市非典应对工作新闻发布会上,浦东新区副区长王...

2023-09-19
友情链接