2012-12-12 26 views
5

我运行SQL Server跟踪来跟踪一些死锁问题,并且我的头部被命名为Parallel query worker thread was involved in a deadlock,这是造成死锁的原因。并行查询工作者线程陷入了死锁

enter image description here

Q1:这是否意味着同样的查询死锁它的自我?查询执行计划显示了一些并行情况。

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

+0

查询线上书籍中的MAXDOP – SQLMenace

回答

7

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

这些类型的死锁将始终包含两个或多个进程,并且将始终包含一个锁资源。

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

当一个进程死锁与自己(很少与最新版本)它被称为内部查询并行性死锁,你会得到一个错误,如“消息8650,级别13,状态1,行1内部查询并行性导致您的服务器命令(进程ID n)死锁。使用查询提示选项(maxdop 1)重新运行没有内部查询并行性的查询。“详情请参阅this link

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

+1

Dead repro link。你可以扩展链接中的内容吗? –