如何使用工具来追踪死锁错误
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