SQL 2008在简单删除时出现死锁

时间:2009-07-17 18:46:50

标签: sql-server sql-server-2008

我们在SQL 2008中对我们的事件表运行一个非常小的删除,它会随机创建一个死锁。但是,我们无法按需重新创建它。 delete语句适用于最多2-5行

从Administration_NET.dbo.tblEvents删除 其中EMSaccountID ='DELE10A'

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

对自己的死锁或另一个声明死锁?

它可以是一个简单的reader/writer deadlock based on index access order,请参阅我的链接以获取说明。如果EMSaccountID是非聚集索引,则很有可能。

答案 1 :(得分:1)

没有更丰富的信息,没有人可以帮助你:

特别是,您必须启用一些跟踪标志,以便SQL Server记录它回滚相关事务的原因。

因此,启用死锁跟踪:

DBCC TRACEON(1204,1222)    

(循环sql server时此设置将消失,如果需要,可以在启动选项中指定)

启用此设置后,SQL Server日志将包含有关死锁链的信息,如下所示:

2003-05-14 11:46:26.76 spid4     Starting deadlock search 1
2003-05-14 11:46:26.76 spid4     Target Resource Owner:
2003-05-14 11:46:26.76 spid4      ResType:LockOwner Stype:'OR' Mode: S SPID:55 ECID:0 Ec:(0x43CAB580) Value:0x42bdf340
2003-05-14 11:46:26.76 spid4      Node:1       ResType:LockOwner Stype:'OR' Mode: S SPID:55 ECID:0 Ec:(0x43CAB580) Value:0x42bdf340
2003-05-14 11:46:26.76 spid4     
2003-05-14 11:46:26.76 spid4     End deadlock search 1 ... a deadlock was not found.
2003-05-14 11:46:26.76 spid4     ----------------------------------
2003-05-14 11:46:31.76 spid4     ----------------------------------
2003-05-14 11:46:31.76 spid4     Starting deadlock search 2

在您的问题上粘贴该信息,诊断问题至关重要。

答案 2 :(得分:0)

运行:

SET SET SHOWPLAN_ALL ON

然后删除,是否有表扫描?如果是这样,你有一个索引问题

答案 3 :(得分:0)

有多少种不同类型的语句命中tblEvents表?是否有可能在删除的同时运行insert / update / select语句?您可以尝试通过在尝试删除时同时运行大量插入/更新/选择来重新创建问题。

答案 4 :(得分:0)

我有愚蠢的想法 - 也许您设置表Administration_NET.dbo.tblEvents以使用级联删除...在这种情况下,删除操作将在更多表上设置更多锁。