Sql server 2008 在重新启动SQL服务之前保存执行计划?这能做到吗?

Sql server 2008 在重新启动SQL服务之前保存执行计划?这能做到吗?,sql-server-2008,Sql Server 2008,SQL server在SQL服务重新启动时删除所有执行计划。在我们重新启动服务之前,有没有办法保存这些文件 没有 您可以提供的最接近的东西是计划指南,但即使使用计划指南,服务器也必须在重启后第一次提交查询时重新编译它。从理论上讲,计划指南可以减少查询编译期间所需的工作量 正如Martin所建议的,如果您想进行分析,您可以提取有关查询计划的信息,但以后不能将这些信息放回: 从sys.dm\u exec\u cached\u计划中选择查询计划交叉应用sys.dm\u exec\u query\u计划

SQL server在SQL服务重新启动时删除所有执行计划。在我们重新启动服务之前,有没有办法保存这些文件

没有

您可以提供的最接近的东西是计划指南,但即使使用计划指南,服务器也必须在重启后第一次提交查询时重新编译它。从理论上讲,计划指南可以减少查询编译期间所需的工作量

正如Martin所建议的,如果您想进行分析,您可以提取有关查询计划的信息,但以后不能将这些信息放回:

从sys.dm\u exec\u cached\u计划中选择查询计划交叉应用sys.dm\u exec\u query\u计划(计划句柄)

如果您真的担心,那么设置一组查询,以便在服务重新启动后运行,这将填充计划缓存。但我认为那是浪费时间

SQL Server服务将关闭这一事实意味着用户将经历停机。这已经需要规划和沟通。了解到这种重启的影响范围比重启期间的拒绝服务(最初几分钟的使用可能会很慢)更大,只会稍微改变您的计划和通信。如果某种理论上的缓慢是一个大问题,那么你必须更仔细地计划停机时间,或者等待一个更合适的时间——也许是凌晨2点而不是下午2点


我之所以说“理论上的缓慢”,是因为没有人会在以后重新编译查询时遇到任何真正的问题。查询通常编译得非常快。

保存的目的是什么?您的意思是,在重新启动后,它不必花费时间重新编译它们吗?如果是这样,答案是“不”。如果要进行分析,您可以将sys.dm\u exec\u cached\u计划中的查询计划(plan\u handle)转储到表中。