重新运行特定的实际查询计划


7

我已经捕获了特定查询的实际查询计划。

之后,我更改了一些内容(包括更新统计信息)并重新运行了该特定查询。现在,实际的查询计划有所不同(这很有意义)。

现在查询运行速度快得多。我很好奇新的执行计划是否与此有关,因为其他更改(IO设置更改,VM设置更改,sql实例重启等)也可能导致性能提高。为了对此进行测试,我想再次运行查询,并尝试强制SQL Server使用旧的执行计划。

问题:有没有一种方法可以使用用户提供的执行计划重新运行查询,甚至可以直接从这样的计划运行查询?

这是我试图弄清楚的一件事:

底线是:这可能吗?如果是这样:如何?


我使用以下内容检查开发和测试系统上长期运行和短期运行的查询。然后清除现有计划,缓冲区,高速缓存,并在打开跟踪的情况下执行查询。使用dbcc drop / free函数清除会话,高速缓存,缓冲区等,并关闭或关闭跟踪。无关但有用的,是查看表中数据的处理方式。请注意,我看到您正在使用S2K12,因此这些参考应该匹配。在早期版本的Sql Server中,该行为可能有所不同。希望这可以帮助。DBCC FREESYSTEMCACHE,DROPCLEANBUFFERS,Trace On,show_statistics等
Ray Porrata 2014年

Answers:


10

是。

您需要USE PLAN提示。

在其中提供XML第一个计划的。

SELECT *
FROM T
OPTION (USE PLAN N'<?xml version="1.0" encoding="utf-16"?> ....')

尽管不能保证计划完全相同(例如,计算标量运算符可以移动),但可能很接近。


谢谢,正是我要的。(不幸的是,这给我带来了一个新问题:“ 找不到查询计划,因为优化器在搜索USE PLAN提示中指定的计划时超出了允许的操作数量。 ”,但这是我要解决的另一个问题。)
Jeroen

@Jeroen-嗯。不知道是否有任何解决方法。也许有一些跟踪标志会增加该限制,但是如果存在,我不知道!
马丁·史密斯

没问题,在任何情况下都可以为您提供帮助:今天学到了一些新知识!:D
Jeroen

@Jeroen-也许未公开的TF 8780 禁用了优化器超时?不确定是否会达到预期的效果。
马丁·史密斯
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.