SQL Server 死锁与事务隔离级别读取未提交
Posted
技术标签:
【中文标题】SQL Server 死锁与事务隔离级别读取未提交【英文标题】:SQL Server Deadlock with Transaction Isolation Level Read Uncommitted 【发布时间】:2015-04-15 20:31:11 【问题描述】:即使我将事务级别设置为未提交,我也会遇到这种死锁。有什么我做错了吗?我想我应该在这里得到一个肮脏的阅读。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT
DISTINCT
venueCourt.Id,
错误
System.Data.SqlClient.SqlException: Transaction (Process ID 73) was deadlocked on thread | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
【问题讨论】:
你能分享更多的查询吗?我想知道是否还有其他影响它。此外,如果它在存储过程或触发器中运行,则隔离级别是临时的。 请实际执行计划。图像足以开始。 SP,以及查询中的大量连接 【参考方案1】:如果查询对您进行并行处理,您可能会遇到死锁......虽然我会对这样一个简单的查询感到非常惊讶。
尝试在查询结束时添加 OPTION (MAXDOP 1)。
【讨论】:
好吧,查询没那么简单,相当复杂,我只是在它的顶部添加了它 你能解释一下 OPTION (MAXDOP 1) 会做什么吗? 它强制 SQL Server 只使用一个 CPU 核心(无并行性)。如果那是导致它的原因,应该清除你的僵局。 它会只为那个查询做吗?出于性能原因,如果可能的话,我想为其他查询保持并行性。以上是关于SQL Server 死锁与事务隔离级别读取未提交的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因