在 SQL Server 2005 中,当计划缓存填满时会发生什么?我做了一些研究,从收集到的点点滴滴看来,缓存的计划似乎被赋予了一个“年龄”,包括它的权重或编译成本,乘以它自缓存以来运行的次数。随着时间的推移,这个年龄会递减,直到它达到 0,这时它被认为是“老化”并且是在需要时进行刷新的候选对象。当计划缓存填满时,过时的计划将从缓存中清除。
幕后是否还有其他事情使这种情况复杂化?
谢谢,
马特
在 SQL Server 2005 中,当计划缓存填满时会发生什么?我做了一些研究,从收集到的点点滴滴看来,缓存的计划似乎被赋予了一个“年龄”,包括它的权重或编译成本,乘以它自缓存以来运行的次数。随着时间的推移,这个年龄会递减,直到它达到 0,这时它被认为是“老化”并且是在需要时进行刷新的候选对象。当计划缓存填满时,过时的计划将从缓存中清除。
幕后是否还有其他事情使这种情况复杂化?
谢谢,
马特
在 MSDN 上找到的主题的最佳信息位于:执行计划缓存和重用 。引用自 MSDN 文章:
“从过程缓存中删除执行计划
只要有足够的内存来存储执行计划,它们就会保留在过程缓存中。当存在内存压力时,数据库引擎使用基于成本的方法来确定要从过程缓存中删除哪些执行计划。为了做出基于成本的决策,数据库引擎根据以下因素增加和减少每个执行计划的当前成本变量。
当存在内存压力时,数据库引擎通过从过程缓存中删除执行计划来做出响应。为确定要删除的计划,数据库引擎会反复检查每个执行计划的状态,并在当前成本为零时删除计划。当存在内存压力时,不会自动删除当前成本为零的执行计划;只有当数据库引擎检查计划并且当前成本为零时,它才会被删除。在检查执行计划时,如果查询当前未使用该计划,数据库引擎会通过降低当前成本将当前成本推向零。”
最好阅读完整的文章,它有很好的记录。看到它也有一些链接。