gpt4 book ai didi

sql-server - SQL Server 两个更新语句之间出现死锁

转载 作者:行者123 更新时间:2023-12-02 23:37:27 24 4
gpt4 key购买 nike

我有一个网站,上面有一个非常受欢迎的论坛,有时我会看到同一论坛上两个相同(减去其中的数据)更新语句之间发生几个死锁。我不太确定为什么此查询会发生这种情况,因为该网站上还有许多其他查询以高并发运行而没有问题。

Update Deadlock Graph

Full Image

两个进程之间的查询几乎相同,图表显示为:

update [Forum] set [DateModified] = @DateModified, [LatestLocalThreadID] = @LatestLocalThreadID where ID = 310     

谁能解释一下是什么原因造成的?

最佳答案

这是因为 ForumThreads 有一个外键,当您设置 LatestLocalThreadID 时,该外键会生成 S 锁(以确保语句完成时该行仍然存在) )。一个可能的修复方法是在更新语句前添加前缀

SELECT *
FROM ForumThreads WITH (XLOCK, ROWLOCK, HOLDLOCK)
WHERE ID = @LatestLocalThreadID

为了X锁定它。您还可以尝试 UPDLOCK 作为一种不太激进的模式。这当然可能会导致其他地方出现死锁,但这是最好的第一次尝试。

关于sql-server - SQL Server 两个更新语句之间出现死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18640458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com