web-dev-qa-db-ja.com

実行計画の警告

4つの内部結合を持つT-SQLクエリがあります。SSMSActual Execution Planを選択してクエリを実行しました。生成されたプランを確認すると、Sortオペレーターに警告アイコンが表示されていました。 Sort演算子でこの警告が出る理由は何ですか?

クエリプランのURL: https://www.brentozar.com/pastetheplan/?id=HJULL9H4N

実行計画のスクリーンショットを提供しました。 enter image description here

警告: - enter image description here

1

ソート演算子でこの警告が出る理由は何ですか?

要素のプロパティで警告の説明を確認できます。以下のような情報が表示されるはずです。

オペレーターはtempdbを使用して、実行中にデータを流出しました。

これは、クエリに対して許可されたメモリが、必要なメモリよりも少ないことが判明したことを意味します。これには2つの理由が考えられます。

  1. カーディナリティの推定が間違っているため、クエリは実際に必要とするよりも少ないメモリ許可を要求しました
  2. メモリ不足のため、クエリは十分なメモリを要求しましたが、メモリが少なくなりました

メモリの付与に関する詳細情報は、クエリプランのSELECToperationのプロパティウィンドウにあります。

1
Denis Rubashkin

私は完全に新しい答えを書いているわけではありません。そのほとんどは、デニスによるコメントと回答の間でカバーされています。

考えられる2つの理由。 Wrong cardinality estimationおよびLack of memory。除外する方法を説明しますLack of Memory

MemoryGrantInfoの下のMaxQueryMemory(左端の選択ノードを右クリックすると):クエリの実行にメモリが必要な場合の、個々のクエリ許可に使用可能なメモリの最大量(KB)。

enter image description here

したがって、MaxQueryMemoryが要求されたメモリよりも大きい場合は、ソートの警告がメモリ不足によるものではなく、基数の推定が不適切であることを示しています。

について読む価値がある SQLサーバーのメモリ許可について

参照:

0
SqlWorldWide