web-dev-qa-db-ja.com

リソースで待機しているクエリを特定する

実行時にCXCONSUMER待機時間のクエリがありますsp_whoisactive以下のスクリーンショットに示すとおり。

enter image description here 私がステータスをチェックしたとき、それはsuspendedです。つまり、あるプロセスがリソースを解放するのを待っていることを意味します。私の理解する限り、CXPACKETはプロデューサーであり、CXCONSUMERが消費者であり、CXPACKETが主な原因であり、それに対処する必要があります。しかし、CXPACKETは表示されません。これは並列実行なので、どこから修正を始めればよいかわかりません。

誰かが私のクエリが待機しているプロセスを見つける方法を教えてもらえますか?

追加情報

クエリを実行するとsys.dm_os_wait_stats、上位2つのエントリはCONSUMERとCXPACKETSです。

  • SQL Server 2016
  • 128 GBのRAM
  • 最大DOP:8
  • しきい値のコスト:20
3
user9516827

Erik Darlingからのこの投稿をチェックしてください: CXCONSUMERは無害ですか?それほど速くない、タイガー

これは、CXCONUSMERが最大の待機である問題クエリの非常に極端な例を示しています。したがって、Microsoftの推奨事項は無害であることを示していますが、それは間違いなく他の問題の兆候である可能性があります。

これとスクリーンショットに基づいて、歪んだ並列処理で問題が発生している可能性は十分にあります。 Paul Randalから、歪んだ並列処理に関するすばらしい情報を見つけることができます。 CXPACKET待機の詳細:歪んだ並列処理

理論では、CXPACKETが待機するときに、歪んだ並列処理による待機が表面化するはずです。ただし、現時点では常にそうであるとは限りません。

クエリテキストがない場合、特に実際の実行プランがない場合、CXCONSUMERがシナリオを待機している原因を推測することしかできません。しかし、うまくいけば、これはあなたに調べる方向を与えるのに役立ちます。

実行プランとクエリテキスト(および関連するテーブル/インデックス定義)を含めるように質問を編集すると、根本的な原因を追跡するのに役立ちます。

5
Josh Darnell