【发布时间】:2011-05-26 08:23:04
【问题描述】:
当我在 SQL Server 中获得死锁图 xml 时,它会显示每个进程的 executionStack,例如(我已经删除了大部分属性):
<process>
<executionStack>
<frame>INSERT INTO MYTABLE</frame>
<frame>INSERT INTO MYTABLE</frame>
</executionStack>
<inputbuf>INSERT INTO MYTABLE</inputbuf>
</process>
我知道帧列表不包含事务中的所有帧,但它是否包含所有涉及死锁的帧,所以我不需要进一步查看?还是我还需要检查同一个事务中的前面的 sql 语句才能全面了解死锁的原因?
编辑:为了进一步澄清,如果在两个单独的 spid 中运行,以下内容可能会自行死锁:
select * from mytable where column = @arg 从 mytable 中删除 column = @arg
死锁图会显示 select 语句以及 delete 语句,还是只显示 delete 语句,因为那是事务中的最后一条语句?如果也没有看到 select 语句,就很难确定正确的修复(例如,选择上的更新锁定提示)。
【问题讨论】:
-
如何完成?它应该包含诊断原因所需的所有信息......
标签: sql-server sql-server-2008 deadlock