在 SQL Server 中重新启动后的执行计划行为

And*_*gel 4 performance sql-server optimization query-performance

我一直在思考重新启动服务后执行计划在 SQL SERVER 中的行为。我知道在缓存内存中的每个查询执行中都存在一个过程来解析、编译和优化请求的查询,应用基于 SQL 中的统计信息和其他参数的执行计划。所有这些执行计划都存储在存储引擎的缓冲池区域中。实际上,每次执行后,这些计划都会更新,让 SQL SEVER 了解新的改进。

这是我的疑问:每次我决定重新启动 SQL 服务时,缓存中的执行计划会发生什么?缓冲池区域中的所有改进都被存储并重新加载以在新的执行中可用?所有执行计划都在重新启动之前重新加载为最新版本,或者相反,SQL 需要创建新的执行计划库以继续改进执行?

拜托,伙计们,如果你能解释这种行为,我将非常感激。非常感谢

Sql*_*ide 5

这就是重新启动 SQL Server 时发生的情况。正确的说法是 SQL Server 必须创建新的执行计划,选择“相当好的一个”并将其保存在缓存中以重复使用。

或者相反,SQL 需要创建新的执行计划库以继续改进执行?

您对问题中的执行计划有一些误解。

计划不会在每次执行后更新。SQL Server 会跟踪计划的使用次数、上次使用次数以及其他一些指标。如果您有内存压力,则使用指标用于决定需要删除哪些计划以释放内存。

实际上,每次执行后,这些计划都会更新,让 SQL 了解新的改进。

您可以手动从缓存中删除计划,详情请点击此处

SQL vnext (2017) 宣布了一些改进,可以动态调整/修改查询计划,称为Adaptive Query Processing。您可以观看 Microsoft 产品经理 Joe Sack 的视频。在这里这里阅读。