現在、大きなクエリが実行されています。ディスクに流出するバッチモードハッシュ結合の結果は、select into
を使用して一時テーブルにストリーミングされます。クエリでは、待機タイプHTDELETE
およびHTREPARTITION
が時々表示されます。クエリは列ストアインデックスを使用していません。
これらの待機タイプは、ディスクに流出するバッチモードのハッシュ結合では正常であると確信しています。好奇心からこれらの待機タイプの意味を理解しようとしています。おそらく、この洞察はクエリの最適化や問題の発見に役立ちます。では、これらの待機タイプは何を意味し、どのような状況で予期されるのでしょうか?
列ストアインデックスはありません。行モードテーブルのバッチモードを有効にするためにleft join ZeroRowCsTable on 0=1
トリックを使用しています。
ypercubeによって質問に対するコメントから生成されたコミュニティWiki回答
MSDNフォーラムスレッド から:
HTDELETE
SQL Server 2014では、スレッドごとのコピーではなく、1つの共有ハッシュテーブルが使用されるようになりました。これにより、ハッシュテーブルを永続化するために必要なメモリ量を大幅に削減できるというメリットがありますが、ご想像のとおり、ハッシュテーブルの単一のコピーに依存する複数のスレッドは、たとえば、ハッシュテーブルの割り当てを解除する前に互いに同期する必要があります。そのために、これらのスレッドはHTDELETE(ハッシュテーブルDELETE)待機タイプで待機します。
(これは、バッチモードで実行されるハッシュ演算子にのみ適用されます)