2012-12-12 25 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。你可以擴展鏈接中的內容嗎? –