none
32位数据库服务器上无法缓存执行计划 RRS feed

  • 问题

  • 环境描述

    OS:WIN2008     物理内存:32G

    问题描述:

    昨天早上(3/15)发现生产服务器上执行计划一直在被清空,导致执行语句非常慢!

    下图是问题发生期间性能计数器的值(Total Server Memory & Target Server Memory)

    问题发生期间的TargetMemory和TotalMemory相等!

    下图是问题发生期间该服务器上所有数据库使用缓存的空间情况

    发现问题后,我以为是因为缓存太多了导致的问题,所以我清空了所有缓存,清空后查看发现确实释放了各个数据库占用的空间,但结果还是一样!执行计划始终无法缓存!当时的磁盘I/O也很正常,CPU使用率一直很低!

    不知道是什么原因导致的问题!求教!谢谢啦!

    2012年3月16日 6:12

全部回复

  • 忘记说了,我开启了AWE,MAX SERVER MEMORY分配为25G!
    2012年3月16日 6:13
  • 你看的cache是数据的cache,和plan cache不一样。DBCC FREEPROCCACHE 可以清楚计划缓存。

    不过你这个问题的原因多半不是计划缓存满了。


    想不想时已是想,不如不想都不想。

    2012年3月16日 6:24
    版主
  • 谢谢回复,但我现在就是不想让计划缓存被清除啊! 我原以为是数据页Cache撑满了BufferPools ,但问题是我清除了数据页Cache,计划缓存还是不能保留!
    2012年3月16日 7:55
  • 补充一张发生问题期间PlanCache状况的截图:

     

    执行计划没有一个缓存下来。。。。(截图中的两个也是我查询语句当时产生的PLAN)

    2012年3月16日 8:38
  • Check plan cache size in perfmon. On 32-bit machine, only data cache can use memory above 4gb range (awe). All other pools share 2gb memory with other user mode apps on the server.
    2012年3月16日 17:21
  • 不好意思,没怎么明白兄台的意思,我为什么要去检查PlanCach的SIZE啊!我就是因为发现plan size一直几乎为0才提问的啊。。。。

    2012年3月17日 3:55
  • 补充一张发生问题期间PlanCache状况的截图:

    执行计划没有一个缓存下来。。。。(截图中的两个也是我查询语句当时产生的PLAN)

    能否把查询出上面2个结果集的T-SQL语句贴出来?
    2012年3月17日 4:34
  • SELECT  COUNT(1) PlansNum
      ,SUM(CAST(SIZE_IN_BYTES AS BIGINT))*1.0/1024/1024 AS [PlanCacheSize(M)]
    FROM SYS.dm_exec_cached_plans

     

    SELECT objtype
      ,COUNT(1) PlansNum
      ,SUM(CAST(SIZE_IN_BYTES AS BIGINT))*1.0/1024/1024 [PlanCacheSize(M)]
      ,AVG(usecounts) avgusecount
    FROM SYS.dm_exec_cached_plans
    GROUP BY objtype

    2012年3月17日 6:54
  • Your PlanCacheSize is cache size used by listed plans, not same as size of whole plan cache. Plan cache size is based on physical memory size and usage on the sever. 
    2012年3月17日 17:04
  • 能否详细点?我那段SQL列出的不是所有的PlanCache ?烦请指点!谢谢啦:-)

    2012年3月18日 10:18
  • 数据库是不是设置成auto_close了?服务器是不是设置了针对即席工作负荷进行优化?

    想不想时已是想,不如不想都不想。

    2012年3月18日 13:38
    版主
  • 能否详细点?我那段SQL列出的不是所有的PlanCache ?烦请指点!谢谢啦:-)

    It shows plans in the cache and space used but not real cache size. 
    2012年3月18日 22:03
  • auto_close是false

    optimize for ad hoc workloads我开启了

    2012年3月19日 1:35
  • 能否详细点?我那段SQL列出的不是所有的PlanCache ?烦请指点!谢谢啦:-)

    It shows plans in the cache and space used but not real cache size. 

    请指教如何才能查看真正的Cachesize?是性能计数器里 Memory 下的 Cache Bytes吗?

    2012年3月19日 1:48
  • That's for dynamic sql, check counters under sqlserver:plan cache.
    2012年3月19日 2:00
  • auto_close是false

    optimize for ad hoc workloads我开启了

    Means will not cache single use ad hoc plan.
    2012年3月19日 2:03
  • auto_close是false

    optimize for ad hoc workloads我开启了


    在生产系统上修改系统配置之前,最好先理解透彻这些配置的含义,不要光看字面就下手。

    想不想时已是想,不如不想都不想。

    2012年3月19日 7:02
    版主
  • 不过注意的是如果真的是由 optimize for ad hoc workloads开启引起的,那也并不意味着optimize for ad hoc workloads关闭了性能就会好转,具体情况具体分析。

    2012年3月19日 9:08
  • auto_close是false

    optimize for ad hoc workloads我开启了


    在生产系统上修改系统配置之前,最好先理解透彻这些配置的含义,不要光看字面就下手。

    想不想时已是想,不如不想都不想。


    我的问题是无法缓存执行计划(包括proc、view、function),开启optimize for ad hoc workloads我是为了节省缓存资源以缓存更多有意义的plan,我不是来求教这个命令的意义的啊
    2012年3月19日 9:15