SQL Server 2008计划缓存几乎总是空的

时间:2016-04-21 05:46:37

标签: sql-server sql-server-2008

为了调查查询计划的使用情况,我试图了解内存中存储了哪种查询计划。

使用此查询:

SELECT objtype AS 'Cached Object Type', 
COUNT(*) AS 'Numberof Plans', 
SUM(CAST(size_in_bytes AS BIGINT))/1048576 AS 'Plan Cache SIze (MB)', 
AVG(usecounts) AS 'Avg Use Counts' 
FROM sys.dm_exec_cached_plans 
GROUP BY objtype  
ORDER BY objtype 

我的计划缓存结构几乎是空的。 almost empty plan cache

服务器上有128Gb的RAM,大约20%是免费的。 SQL Server实例不受内存约束。

是的,基本上我有Adhoc查询(没有参数化,没有存储过程)。 但是为什么SQL Server会频繁清空查询计划缓存呢?我有什么问题?

3 个答案:

答案 0 :(得分:2)

如果服务器没有内存压力,那么plan caching white paper的其他一些可能性就在下面。

是否经常安排这些行动?你有自动关闭功能吗?

  

以下操作会刷新整个计划缓存,因此,   导致第一次提交的批次的新编辑   算账:

     
      
  1. 分离数据库
  2.   
  3. 将数据库升级到SQL Server 2005
  4.   
  5. 将数据库升级到SQL Server 2008
  6.   
  7. 恢复数据库
  8.   
  9. DBCC FREEPROCCACHE命令
  10.   
  11. RECONFIGURE命令
  12.   
  13. ALTER DATABASE ,,, MODIFY FILEGROUP命令
  14.   
  15. 使用ALTER DATABASE ... COLLATE命令
  16. 修改排序规则         

    以下操作会刷新引用a的计划缓存条目   特定的数据库,并在之后引起新的编辑。

         
        
    1. DBCC FLUSHPROCINDB命令
    2.   
    3. ALTER DATABASE ... MODIFY NAME = command
    4.   
    5. ALTER DATABASE ... SET ONLINE命令
    6.   
    7. ALTER DATABASE ... SET OFFLINE命令
    8.   
    9. ALTER DATABASE ... SET EMERGENCY命令
    10.   
    11. DROP DATABASE命令
    12.   
    13. 数据库自动关闭时
    14.   
    15. 使用CHECK OPTION创建视图时,将刷新创建视图的数据库的计划缓存条目。
    16.   
    17. 运行DBCC CHECKDB时,将创建指定数据库的副本。作为DBCC CHECKDB的执行的一部分,一些查询反对   副本被执行,他们的计划被缓存。在DBCC结束时   CHECKDB的执行,副本被删除,查询计划也被删除   副本上提出的查询。
    18.   

以下sp_configure / reconfigure操作also clear the procedure cache

  
      
  • 访问检查缓存桶数
  •   
  • 访问检查缓存配额
  •   
  • clr enabled
  •   
  • 并行成本阈值
  •   
  • 跨数据库所有权链接
  •   
  • index create memory
  •   
  • 最大并行度
  •   
  • 最大服务器内存
  •   
  • max text repl size
  •   
  • max worker threads
  •   每个查询
  • 最小内存
  •   
  • min server memory
  •   
  • 查询州长费用限额
  •   
  • 查询等待
  •   
  • 远程查询超时
  •   
  • 用户选项
  •   

答案 1 :(得分:2)

最后,只有实例重启解决了我的问题。现在计划缓存看起来更健康。

答案 2 :(得分:0)

大约一周前我遇到了同样的问题,并发布了几个问题。虽然我实际上没有找到问题的答案,但我对这个过程有了一些了解。并且愚蠢,因为它听起来SQL Server服务重启帮助但引发了另一个问题 - 恢复过程持续了4个小时。看起来像一个非常大的交易已经到位......

empty-plan-cache-problem

Almost empty plan cache

Almost empty plan cache