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に並列処理を使用させないように、または少なくともできるだけ多くのSQL Serverを使用しないようにするには、どのような方法がありますか?

+0

オンライン上の書籍のMAXDOPを参照してください。 – SQLMenace

答えて

7

Q1を参照してください、あなたはまた、時々、あなたが必要とするすべての指標であるクエリヒント

としてMAXDOPを使用して見てみましょうしたいUnderstanding and Using Parallelism in SQL Server

を見てみましょう:ありませんデッドロックにExchangeオペレータが関わっていることを意味します。クライアント側では、「トランザクション(プロセスID n)が{thread | 通信バッファ}のリソースでデッドロックされました」というエラーが発生し、デッドロックの犠牲者として選択されました。

これらの種類のデッドロックには常に2つ以上のプロセスが含まれ、常にロックリソースが含まれます。

Here is a reproこのシナリオでは、ほとんどの場合、正しいインデックスを持つことでこの問題が解決されます。

プロセスがデッドロックしている(最新のビルドでは非常にまれ)と、イントラクエリ並列処理のデッドロックと呼ばれ、「メッセージ8650、レベル13、状態1、行1」のようなエラーが発生します。クエリのヒントオプション(maxdop 1)を使用して、クエリをクエリ内の並列処理なしで再実行します。詳細については、this linkを参照してください。

Q2: Denis提供のリンクを参照してください。

+1

デッドレプロリンク。あなたはリンクにあったものを拡大できますか? –

関連する問題