web-dev-qa-db-ja.com

クエリストアの強制計画機能が機能しない

クエリストアフォースプラン機能がプランを適用していないようです。

私は知っています クエリストア-強制は常に強制を意味するわけではありません ;しかし、私の計画はさほど変わらないかもしれませんが、クエリオプティマイザーは引き続き不適切なインデックスやループの選択などを選択する可能性があります。

基本的に:それは私の強制的な計画の選択を尊重しません。私は多くの計画を強制し、それはうまくいきません

  1. sys.query_store_planforce_failure_countを見ると、失敗数または理由は0です。
  2. 拡張イベントquery_store_plan_forcing_failedは何も生成しません。 0イベント。

たとえば、20.09に強制された計画。たまたま強制プランを使用したコンパイルは1つだけです。

Plans for Query

計画は大きく異なります。1つはINDEX 1でハッシュ一致結合を使用し、もう1つはINDEX 2でループ結合を使用します。

Different plans

バージョン:Microsoft SQL Server 2016(SP1-GDR)(KB3210089)-13.0.4202.2(X64)

ここで何が欠けていますか?

12
Janis Veinbergs

From sys.query_store_plan(Transact-SQL) (強調を追加)

制限の強制を計画する

クエリストアには、クエリオプティマイザーが特定の実行プランを使用するように強制するメカニズムがあります。ただし、計画の実施を妨げる可能性があるいくつかの制限があります

まず、計画に以下の構造が含まれている場合:

  • 一括ステートメントを挿入します。
  • 外部テーブルへの参照
  • 分散クエリまたは全文操作
  • グローバルクエリの使用
  • カーソル
  • 無効なスター結合仕様

カーソルを使用しています。


多くの場合、代わりにプランガイドを使用してカーソルプランを強制できます。 カーソルを含むクエリでのUSE PLANクエリヒントの使用 を参照してください。

そして、はい、私は現在の状況が最高のユーザーエクスペリエンスを作り出さないことに同意します。 (現時点では)強制できないものに対して計画を強制しようとすると、エラーまたは警告が発生するか、何かがログに記録されると思います。 フィードバックアイテム をログに記録して、この領域の改善をリクエストできます。


SQL 2019 CTP 2.3以降、早送りカーソルと静的カーソルのクエリ実行プランを強制 サポートされています

クエリストアは、早送りおよび静的T-SQLおよびAPIカーソルのクエリ実行プランを強制する機能をサポートするようになりました。強制はsp_query_store_force_planまたはSQL Server Management Studioクエリストアレポートを通じてサポートされるようになりました。

16
Paul White 9