SQL Server 2008死锁图执行堆栈的完整性如何?
|
当我在SQL Server中获得死锁图xml时,它显示了每个进程的执行堆栈,例如(我删除了大多数属性):
<process>
<executionStack>
<frame>INSERT INTO MYTABLE</frame>
<frame>INSERT INTO MYTABLE</frame>
</executionStack>
<inputbuf>INSERT INTO MYTABLE</inputbuf>
</process>
我知道框架列表不包含事务中的所有框架,但是它包含与死锁有关的所有框架,所以我不需要进一步检查了吗?还是我还需要在同一事务中检查前面的sql语句,以完整了解死锁的原因?
编辑:进一步说明,如果在两个单独的spid中运行,则以下内容可能会自身死锁:
从mytable中选择*,其中column = @arg
从mytable中删除,其中column = @arg
死锁图会显示select语句还是delete语句,还是仅显示delete语句,因为那是事务中的最后一条语句?也没有看到select语句,就很难确定正确的修复方法(例如,select上的updlock提示)。
没有找到相关结果
已邀请:
1 个回复
瞧叮
连接2(在连接1之后快速执行)
死锁图
未显示首先获得锁的第4列的分配。 (注:如果不使用“ 5”语句将语句分开进行批处理,在这种情况下,您将看到有问题的语句,但是通常,锁获取可能会在调用堆栈的更下方进行,因此,实际上不会显示实际获取锁的语句)