有关过程caching的SQL Server 2005问题

服务器:SQL Server 2005 SP2 64位,32内存。 运行2个SQL Server实例。 我正在使用的主要实例有20个可见的演出。

我们有一种情况,每隔一段时间就会出现一次,我们的整个过程caching被清除,而这又会迫使存储过程(sp)重新编译。 一旦sp在caching中,一切都会快速运行一段时间。 几个小时之后,它从caching中被清除,并且必须重新编译,导致事情运行缓慢。

我正在使用以下方式观看caching:

SELECT cp.objtype AS PlanType, OBJECT_NAME(st.objectid,st.dbid) AS ObjectName, cp.refcounts AS ReferenceCounts, cp.usecounts AS UseCounts, st.TEXT AS SQLBatch, qp.query_plan AS QueryPlan FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st GO 

DBCC FREEPROCCACHE永远不会被调用。

如果我运行DBCC MEMORYSTATUS,我可以看到程序caching的TotalPages约为500k页。 这出来是3.9千兆分配给caching。 引用: SQL Server 2008中的计划caching (有关caching的部分包括2005 SP 2)。 这表明压力限制应该是4.6演出。 (0-4GB的可见目标内存的75%+ 4Gb-64GB的可见目标内存的10%+可见目标内存的5%> 64GB … 3gigs + 1.6gigs = 4.6g)

这似乎表明,我们不应该在另外700兆的caching压力下。 如果统计信息发生变化,那么存储过程应该仍然在caching中,并在下次运行时重新编译,并检查统计信息。 如果是这种情况,我希望caching保持在几乎恒定的大小。

任何想法可能会导致过程caching清空或我应该留意什么来试图找出原因?

是否在第二个实例上configuration了max_server_memory? 或者更重要的是,两个实例的最大内存设置的总和是否小于服务器的总内存? 如果不是,有一个例子可能是从另一个方面窃取记忆。