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

Mos*_*aou 5 sql sql-server parallel-processing deadlock

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

在此输入图像描述

Q1:这是否意味着同一个查询会使自己陷入僵局?查询执行计划显示了一些并行情况.

Q2:有什么方法可以"强制"SQL Server不使用并行性,或者至少避免尽可能多地使用它?

小智 8

Q1:不.这只是意味着死锁涉及一个Exchange运营商.在客户端,您将收到错误"事务(进程ID n)在{thread | communication buffer }资源上与另一个进程死锁,并被选为死锁牺牲品."

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

这是这个场景的一个复制品.在大多数情况下,拥有正确的索引将解决此问题.

当一个进程自身死锁(非常罕见的最新版本)时,它被称为内部查询并行性死锁,你会得到一个错误,如"Msg 8650,Level 13,State 1,Line 1内部查询并行性导致你的服务器命令(进程ID) n)死锁.使用查询提示选项(maxdop 1),在没有查询内并行性的情况下重新运行查询." 请参阅此链接了解详情.

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

  • 死repro链接。你能扩展一下链接中的内容吗? (2认同)