5

Parallel query worker thread was involved in a deadlockSQL Serverトレースを実行してデッドロックの問題を追跡しましたが、デッドロックの理由としてこのコメントが頭に浮かびました。

ここに画像の説明を入力してください

Q1:これは、同じクエリがそれ自体をデッドロックしていることを意味しますか?クエリ実行プランは、いくつかの並列処理のケースを示しています。

Q2: SQL Serverに並列処理を使用しないように、または少なくとも並列処理をできるだけ使用しないように「強制」するための可能な方法は何ですか?

4

2 に答える 2

8

Q1:いいえ。これは、デッドロックにExchangeオペレーターが関与していることを意味します。クライアント側では、「トランザクション(プロセスID n)が別のプロセスとの{スレッド|通信バッファー}リソースでデッドロックされ、デッドロックの犠牲者として選択されました」というエラーが表示されます。

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

これがこのシナリオの再現です。ほとんどの場合、正しいインデックスを使用すると、この問題は解決します。

プロセスがそれ自体でデッドロックする場合(最新のビルドでは非常にまれです)、クエリ内並列処理デッドロックと呼ばれ、「メッセージ8650、レベル13、状態1、1行目クエリ内並列処理によりサーバーコマンド(プロセスID n)デッドロック。クエリヒントオプション(maxdop 1)を使用して、クエリ内並列処理なしでクエリを再実行します。」詳細については、このリンクを参照してください。

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

于 2012-12-12T20:34:43.933 に答える
3

SQL Server での並列処理の理解と使用をご覧ください。

また、MAXDOP をクエリ ヒントとして使用することも検討したいと考えています。

インデックスだけが必要な場合もあります。並列処理を示す実行プランの修正を参照してください。

于 2012-12-12T11:51:36.923 に答える