Sql-Server
查詢儲存強制計劃功能不起作用
查詢儲存強制計劃功能似乎沒有強制執行該計劃。
我知道查詢儲存 - 強制並不總是意味著強制;但是,我的計劃可能不會發生微不足道的變化,但查詢優化器可能會繼續選擇不正確的索引、循環選擇等。
基本上:它不尊重我的強制計劃選擇。我已經強迫了很多計劃,但它根本行不通。
- 當我查看時,有 0 個失敗計數或原因
sys.query_store_plan
force_failure_count
。- 擴展事件
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 查詢儲存報告支持強制。