查询存储强制计划功能不起作用


12

查询存储强制计划功能似乎没有执行该计划。

我知道查询存储-强制并不总是意味着强制;但是,我的计划可能不会发生重大变化,但是查询优化器可能会继续选择错误的索引,循环选择等。

基本上:它不符合我的强制计划选择。我强迫了许多计划,但没用

  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)

我在这里想念什么?

Answers:


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查询存储报告支持强制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.