Jan*_*rgs 12 sql-server execution-plan sql-server-2016 query-store
查询存储强制计划功能似乎没有执行该计划。
我知道Query Store - Forced 并不总是意味着 Forced;然而,我的计划可能不会发生微不足道的变化,但查询优化器可能会继续选择不正确的索引、循环选择等。
基本上:它不尊重我被迫的计划选择。我强迫了很多计划,但它根本行不通。
sys.query_store_plan
force_failure_count
.query_store_plan_forcing_failed
不会产生任何结果。0 事件。例如,在 20.09 强制执行的计划。只有 1 个编译碰巧使用了强制计划。
计划大相径庭,一个使用带有 INDEX 1 的 Hash Match join,另一个使用带有 INDEX 2 的 Loop Join。
版本:Microsoft SQL Server 2016 (SP1-GDR) (KB3210089) - 13.0.4202.2 (X64)
我在这里缺少什么?
Pau*_*ite 16
来自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 查询存储报告支持强制。