我们在SQL 2008中对我们的事件表运行一个非常小的删除,它会随机创建一个死锁。但是,我们无法按需重新创建它。 delete语句适用于最多2-5行
从Administration_NET.dbo.tblEvents删除 其中EMSaccountID ='DELE10A'
有什么想法吗?
答案 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以使用级联删除...在这种情况下,删除操作将在更多表上设置更多锁。