完整计划缓存行为


8

在SQL Server 2005中,当计划缓存填满时会发生什么?我进行了一些研究,从收集的点点滴滴来看,似乎已给缓存的计划指定了“年龄”,其中包括其权重或编译成本乘以自缓存以来已运行的次数。随着时间的流逝,该年龄逐渐减少,直到达到0,然后才被视为“老化”,并在需要时成为冲洗对象。计划缓存填满后,会从缓存中清除过期的计划。

幕后是否还有其他事情使这种情况复杂化?

谢谢,

马特

Answers:


9

在MSDN上找到关于该主题的最佳信息是:执行计划缓存和重用 。引用MSDN文章:

“从过程缓存中删除执行计划

只要有足够的内存来存储执行计划,它们就会保留在过程高速缓存中。当存在内存压力时,数据库引擎将使用基于成本的方法来确定从过程高速缓存中删除哪些执行计划。为了做出基于成本的决策,数据库引擎根据以下因素增加和减少每个执行计划的当前成本变量。

存在内存压力时,数据库引擎会通过从过程高速缓存中删除执行计划进行响应。为了确定要删除的计划,数据库引擎会反复检查每个执行计划的状态,并在计划的当前成本为零时删除计划。存在内存压力时,不会自动删除当前成本为零的执行计划;仅当数据库引擎检查计划并且当前成本为零时,才将其删除。在检查执行计划时,如果查询当前未使用计划,则数据库引擎通过降低当前成本将当前成本推向零。”

最好阅读完整的文章,它有很好的记录。看到它也有一些链接。

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.