SQL Server过程缓存

时间:2010-11-08 18:36:03

标签: sql-server sql-server-2005 sql-server-2008

如果你在同一台SQL Server上运行多个数据库,那么它们都会争夺过程缓存吗?我想弄清楚的是SQL Server如何确定持有Procedure Cache的时间长度?如果其他数据库占用内存会影响同一服务器上给定数据库的过程高速缓存吗?

我发现在我们的应用程序中的一些初始页面加载时它很慢,但是一旦查询被缓存,它显然很快。只是不确定SQL Server保留过程缓存的时间长度以及其他数据库是否会影响这段时间。

2 个答案:

答案 0 :(得分:4)

来自documentation

  

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

您可能也会对此链接感兴趣:Most Executed Stored Procedure?

答案 1 :(得分:4)

缓存/编译端到端发生

  • IIS将在默认情况下未使用20分钟后卸载。
  • .net汇编到CLR
  • SQL编译
  • 将数据加载到内存

这就是初始调用需要一些时间的原因

一般来说,东西都停留在缓存中:

  • 在使用中
  • 没有记忆压力
  • 仍然有效(例如,统计信息更新将使缓存的计划无效)

如果您担心,请添加更多内存。另请注意,每个数据库都有不同的加载模式,SQL Server将非常​​好地处理内存。除非你没有足够的RAM ......