并行查询工作线程涉及死锁

时间:2012-12-12 11:48:36

标签: sql sql-server parallel-processing deadlock

我运行一个SQL Server跟踪来跟踪一些死锁问题,我发现此评论Parallel query worker thread was involved in a deadlock是导致死锁的原因。

enter image description here

Q1:这是否意味着同一个查询会自行解锁?查询执行计划显示了一些并行性案例。

Q2:有哪些方法可以“强制”SQL Server不使用并行性,或者至少避免尽可能地使用它?

2 个答案:

答案 0 :(得分:8)

Q1:否。这只是意味着死锁涉及Exchange运营商。在客户端,您将收到错误“事务(进程ID n)在{thread | 通信缓冲区}资源上与另一个进程死锁,并被选为死锁牺牲品。”

这种死锁将始终包含两个或多个进程,并且始终包含锁资源。

对于这种情况,

Here is a repro。在大多数情况下,拥有正确的索引将解决此问题。

当一个进程与自身发生死锁时(非常罕见的最新版本),它被称为内部查询并行性死锁,你会收到一个错误,如“Msg 8650,Level 13,State 1,Line 1内部查询并行性导致你的服务器命令(进程ID n)到死锁。使用查询提示选项(maxdop 1)重新运行没有查询内并行性的查询。“有关详细信息,请参阅this link

Q2:请参阅Denis提供的链接。

答案 1 :(得分:3)

查看Understanding and Using Parallelism in SQL Server

您还想看一下使用MAXDOP作为查询提示

有时您需要的只是一个索引,请参阅Fix Execution Plan showing Parallelism