【发布时间】:2019-01-24 23:06:27
【问题描述】:
我们在系统中遇到了死锁,死锁图显示了这种等待资源格式。
waitresource="KEY: 500:xxxxxxxxxx (f4d477997e11) waitresource="KEY: 500:xxxxxxxxxx (8d4830b45673)"
现在受害者和获胜者都有相同的 HOBTID 并且指向同一个对象 - 在我们的例子中是一个表上的非聚集索引。只有哈希值不同,所以我猜测它的不同行。
当我使用
select *,%%lockres%%
from dbo.myTabke
where %%lockres%% IN('(f4d477997e11)','(8d4830b45673)')
现在这不会产生任何结果。
我的索引本身也是我的死锁等待资源,它的列按此顺序排列 -
test_NonClustIndex(colA, col B, colC) 我的会话中的语句(在同一个表上更新和选择)具有诸如
之类的谓词其中 colA = @a 和 colB = @b 和 colC = @c。
现在对于获胜者和受害者会话,@a 和 @b 是相同的值。只有@c 不同。
如果我将索引的顺序翻转到,我是否能够避免死锁? test_NonClustIndex(colC, colA, col B)?
表上还有其他索引未在死锁图上显示为等待资源。
【问题讨论】:
标签: sql-server-2014 wait database-deadlocks non-clustered-index