在重新启动服务之后,我一直在考虑执行计划在SQL SERVER中的作用。我知道,在缓存内存中的每个查询执行中,都存在一个进程来解析、编译和优化所请求的查询,并应用SQL中基于统计信息和其他参数的执行计划。所有这些执行计划都存储在存储引擎中的缓冲池区域。实际上,每次执行之后,这些计划都会被更新,让SQL服务器了解新的改进。
下面是我的疑问:每次我决定重新启动SQL服务时,缓存内存中的执行计划会发生什么?缓冲池区域中的所有改进都被存储和重新加载,以便在新的执行中可用?所有执行计划都在重新启动之前作为最后一个版本重新加载,或者SQL需要创建新的执行计划库才能继续改进执行吗?
拜托,伙计们,如果你们能解释我的行为我会很感激的。非常感谢
发布于 2017-05-08 14:00:15
这就是重新启动Server时发生的情况。正确的术语将Server必须创建新的执行计划,选择“相当好的执行计划”并将其保存在缓存中以进行重用。
或者,SQL需要创建新的执行计划库才能继续改进执行吗?
你在问题中对执行计划有一些误解。
计划在每次执行后都不会更新。Server跟踪计划被使用的时间、最后一次使用的时间以及很少的其他指标。如果您有内存压力,则使用使用度量来决定需要删除哪些计划来释放内存。
实际上,每次执行之后,都会更新这些计划,让SQL了解新的改进。
您可以手动从缓存中删除计划,详细信息这里。
SQL (2017)宣布了一些改进,可以动态地调整/修改查询计划,称为。您可以观看由Microsoft .这里制作的视频,并阅读这里。
https://dba.stackexchange.com/questions/172972
复制相似问题