gpt4 book ai didi

sql - 死锁:插入与从多个表中选择。快照隔离?

转载 作者:行者123 更新时间:2023-12-05 08:02:28 25 4
gpt4 key购买 nike

在我的数据库中,我有两个密切相关的表。有一个经常调用的 SP,它在一个事务中将一些行插入到两个表中,以及从这些连接的表中执行 SELECT 的其他几个地方。

INSERT 对两个表都采用 X 锁,SELECT 对它们采用 S 或 IS 锁。由于获取共享锁的顺序因查询而异,因此其中一些偶尔会因 INSERT 事务而死锁。

有没有什么好的方法可以避免这些死锁(NOLOCK 可能不符合“好”条件)?

到目前为止,我能想到的唯一通用解决方案是使用 SNAPSHOT 隔离级别。但是,它会增加一些性能开销,而且我还没有找到任何关于这种开销有多大的可靠数据。

最佳答案

我在我的系统中使用快照。它不是免费的,这是肯定的,但替代品也不是免费的——阻塞也会占用资源。使用行锁并不总是有帮助。快照还为您提供一致的数据时间点快照;否则你会暴露在一些微妙的错误中。

还有一件事:即使只有一张表,也可能会出现死锁,示例如下:Reproducing deadlocks involving only one table

关于sql - 死锁:插入与从多个表中选择。快照隔离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6382979/

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