Sql-Server

查詢儲存強制計劃功能不起作用

  • March 26, 2019

查詢儲存強制計劃功能似乎沒有強制執行該計劃。

我知道查詢儲存 - 強制並不總是意味著強制;但是,我的計劃可能不會發生微不足道的變化,但查詢優化器可能會繼續選擇不正確的索引、循環選擇等。

基本上:它不尊重我的強制計劃選擇。我已經強迫了很多計劃,但它根本行不通

  1. 當我查看時,有 0 個失敗計數或原因sys.query_store_plan force_failure_count
  2. 擴展事件query_store_plan_forcing_failed不會產生任何東西。0 個事件。

例如,在 20.09 強制執行的計劃。只有 1 個編譯碰巧使用了強制計劃。

查詢計劃

這些計劃大相徑庭,一個使用帶有 INDEX 1 的雜湊匹配連接,另一個使用帶有 INDEX 2 的循環連接。

不同的計劃

版本:Microsoft SQL Server 2016 (SP1-GDR) (KB3210089) - 13.0.4202.2 (X64)

我在這裡想念什麼?

來自sys.query_store_plan (Transact-SQL)(已添加重點)

計劃強制限制

查詢儲存具有強制查詢優化器使用特定執行計劃的機制。但是,有一些限制可能會阻止執行計劃

首先,如果計劃包含以下結構:

  • 插入批量語句。
  • 引用外部表
  • 分佈式查詢或全文操作
  • 使用全域查詢
  • 游標
  • 無效的星形連接規範

您正在使用游標。


您通常可以使用計劃指南強制游標計劃。請參閱對帶有游標的查詢使用 USE PLAN 查詢提示

是的,我同意目前的情況並不能帶來最佳的使用者體驗。我希望嘗試為(目前)無法強制執行的事情強制執行計劃會引發錯誤或警告,或記錄某些內容。您可以記錄回饋項以請求在此領域進行改進。


自 SQL 2019 CTP 2.3 起,支持Fast Forward 和靜態游標的強制查詢執行計劃

查詢儲存現在支持為快進和靜態 T-SQL 和 API 游標強制執行查詢計劃的能力。現在通過sp_query_store_force_plan或通過 SQL Server Management Studio 查詢儲存報告支持強制。

引用自:https://dba.stackexchange.com/questions/187269