我已经捕获了特定查询的实际查询计划。
之后,我更改了一些内容(包括更新统计信息)并重新运行了该特定查询。现在,实际的查询计划有所不同(这很有意义)。
现在查询运行速度快得多。我很好奇新的执行计划是否与此有关,因为其他更改(IO设置更改,VM设置更改,sql实例重启等)也可能导致性能提高。为了对此进行测试,我想再次运行查询,并尝试强制SQL Server使用旧的执行计划。
问题:有没有一种方法可以使用用户提供的执行计划重新运行查询,甚至可以直接从这样的计划运行查询?
这是我试图弄清楚的一件事:
- 我搜索了我们在办公室可获得的书籍(《Professional SQL Server 2012内部和故障排除》,《查询Microsoft SQL Server 2012》);
- Google搜索,例如“根据特定查询计划运行查询”
- DBA.SE搜索,例如“执行查询计划”和“重新运行执行计划”
- 最后,一个回答了我很多次的问题:在单击“发布您的问题”之前,请仔细检查“可能已经有了答案的问题” :-)
底线是:这可能吗?如果是这样:如何?
我使用以下内容检查开发和测试系统上长期运行和短期运行的查询。然后清除现有计划,缓冲区,高速缓存,并在打开跟踪的情况下执行查询。使用dbcc drop / free函数清除会话,高速缓存,缓冲区等,并关闭或关闭跟踪。无关但有用的,是查看表中数据的处理方式。请注意,我看到您正在使用S2K12,因此这些参考应该匹配。在早期版本的Sql Server中,该行为可能有所不同。希望这可以帮助。DBCC FREESYSTEMCACHE,DROPCLEANBUFFERS,Trace On,show_statistics等
—
Ray Porrata 2014年