十分な計画が見つからないクエリが見つかりました


20

SQL Server 2012データベースがあります。私はReason for early termination of statement optimizationいくつかのクエリの価値に気付き、すべてが与えましたGood Enough Plan Found。私の質問は次のとおりです。

  1. 「ステートメント最適化の早期終了の理由」のすべての可能なタイプは何ですか。msdnでこれを検索しましたが、値の完全なリストを取得できませんでした。
  2. Good Enough Plan Found以外の理由で最適化が終了したすべてのクエリをリストするDMVまたは拡張イベントはありますか?可能性の完全なリストを掲載していない次の2つの記事を参照しました。[また、私のデータベースでは異なる結果が得られます]。

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


回答:


20
  • メモリ制限を超えました

    オプティマイザーは、メモリーの負荷のために、より良いプランの代替案の検索を停止せざるを得ませんでした。その理由を調査して修正し、クエリのコンパイルを再試行する必要があります。返されるプランは、メモリ不足状態が存在しなかった場合にオプティマイザーが選択したプランではない可能性があります。

  • タイムアウト

    この理由は非常に誤解されています。

    クエリオプティマイザーは、合理的な計画をすばやく見つけることを目的としています。最適なプランを見つけるための徹底的な検索は実行されません。設計上、必要以上に最適化に時間を費やすことを避けます。これを保証するために機能するこれらの機能の1つは、「タイムアウト」です(時間の尺度ではありません)。

    オプティマイザーは、論理クエリの複雑さ、カーディナリティー推定、およびこれまでに見つかった最も安価なプランの推定コスト(ある場合)に基づいて、「探索予算」を設定します。より高いカーディナリティを持つより複雑なクエリには、より高い予算が与えられます。

    検索フェーズのいずれかでこの予算を超過した場合、フェーズは終了します。これは、設計の一部であり、オプティマイザーの通常の動作です。より多くのオプティマイザーの努力を必要とするクエリはそれを取得します。しないもの、しないもの。

    「タイムアウト」を「十分な計画が見つかりました」と考えてください。

  • 十分な計画が見つかりました

    これは、空白の理由とまったく同じことを意味します。0.909090 ...(1 / 1.1)未満のコストで計画がこのようにラベル付けされているのは、単に歴史的な癖です。この理由が現れた場合、オプティマイザーコード内で何も早期に停止したり、特別に処理されたり、異なることはありません。

メモリ制限の超過を除いて、「早期終了の理由」はどれも、クエリのチューニングまたはパフォーマンス分析にとって(もしあれば)意味がありません。私は通常それらを無視します。

助言

実際のパフォーマンスメトリック(経過時間、CPU /メモリ使用量、...コンテキストで重要なもの)に基づいて、クエリチューニング作業を対象にします。クエリが意図した目的に対して遅すぎる場合は、時間をかけて高速化します。実際のパフォーマンスを測定し、ベースラインおよび履歴と比較し、重要な差異でチューニング作業をターゲットにします。

有用な統計とインデックス、および適切に記述されたオプティマイザフレンドリーなクエリを使用して、クリーンな保証付きデータを適切なリレーショナルスキーマに格納します。


10

あなたがオーバー行けばhttp://schemas.microsoft.com/sqlserver/2004/07/showplan/showplanxml.xsd(あなたはXMLとして実行計画を開く場合は、表示されますリンクです)、あなたが表示されます次の3つの理由がリストされています。

  • タイムアウト
  • MemoryLimitExceeded
  • GoodEnoughPlanFound

あなたが言及する記事は、これらのイベントを見つけるのに問題がないように見えますが、特定の問題がありますか?留意すべき唯一のことは、これらのDMVはサーバーで実行されたすべてのSQLコマンドをキャプチャせず、サーバーの再起動時にリセットされることです。拡張イベントでshowplan xmlをトラップしてクエリすることもできますが、私にはやり過ぎのようです。

GoodEnoughPlanFoundについてもあまり心配しませんが、オプティマイザーは(優れた計画をすばやく見つける)その仕事をかなりうまく行っているようです。

HTH

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.