我在查询存储中强制执行如下计划
EXEC sys.sp_query_store_force_plan @query_id = 113366, @plan_id = 3687662
但是当我再次运行查询时,查询没有使用计划,也没有显示failure_force_reason
以下查询显示该计划已被强制执行,并表明在上次运行时强制执行没有失败
SELECT plan_id,
query_id,
is_forced_plan,
last_force_failure_reason_desc
FROM sys.query_store_plan
WHERE is_forced_plan = 1
以下查询显示了所讨论查询的最后运行时间,这向我证实了我确实重新运行了这个查询,并且它使用了与我强制执行的计划不同的计划:
SELECT TOP 1
q.query_id,
p.plan_id,
s.last_execution_time,
SYSDATETIMEOFFSET() AS CurrentTime
FROM sys.query_store_query q
JOIN sys.query_store_plan p
ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats s
ON s.plan_id = p.plan_id
WHERE q.query_id = 113366
ORDER BY s.last_execution_time DESC
为什么查询存储似乎忽略了这个计划力?我可以利用任何扩展事件或其他故障排除工具来了解吗?
它使用的计划是否与您试图强制执行的计划相似?
强制执行该计划并不能保证确切的计划将被强制执行。它仍然可以使用道德上等效的计划。
文档摘录(强调我的):
Kendra Little详细介绍了这一点。