有一台服务器内存占用一直在97%(16g), 有人怀疑是数据库缓存的问题,不知道大侠有什么看法?另外清理数据库缓存的命令是?具体在什么地方用?请告知啊,小白。。

解决方案 »

  1.   

    DBCC DROPCLEANBUFFERSDBCC FREEPROCCACHE
      

  2.   

    DBCC FREEPROCCACHE
    http://msdn.microsoft.com/zh-cn/library/ms174283.aspxDBCC DROPCLEANBUFFERS
    http://msdn.microsoft.com/zh-cn/library/ms187762.aspx
      

  3.   

    亲 这是在哪用啊 是在sql里当命令用 还是 cmd中 还有两条都用?
      

  4.   

    产品库设置最大内存 server maximum memory 就可以了,不要在产品库上清buffer cache.
      

  5.   


    Transact-SQL 可以直接在ssms运行,也可以在cmd中运行。建议lz看一下这个AWE http://technet.microsoft.com/zh-cn/library/ms190673(v=sql.105).aspx开启后,再看是否有缓存问题。 清除一般是不得已而为之,毕竟占用很多也是值得处理和分析的状态。
      

  6.   

    先用性能计数器看看内存是否有问题,没问题的话别清。http://blog.csdn.net/dba_huangzj/article/details/8627000然后可以开启一个配置,这个配置没有害处,建议使用:EXEC sp_configure 'optimize for ad hoc workloads', 1
    RECONFIGURE
      

  7.   

    除非确认系统中有很多的 ad hoc workloads,否则不建议使用,影响性能。
      

  8.   

    同意楼上说的,我也不建议直接开启ad hoc workloads,除非真的是有很多的ad hoc查询,并且内存压力很大。另外缓存不要随便清理,会影响数据库的性能。SQL SERVER是应用了缓存提高性能,所以内存占用大是很正常的。
      

  9.   

    这个是只针对仅仅执行1次的sql才不缓存,执行第二次就会缓存。仅仅执行一次的根本也没必要缓存,你觉得我这个想法对吗?
      

  10.   

    一个SQL语句仅仅执行一次的话,自然没有必要缓存它的计划,我想不要想。
      

  11.   

    那我的那个配置就对了:optimize for ad hoc workloads 的原理大概如此:
     
    当你第一次执行 ad hoc 查询的时候,被编译出来的执行计划,sql server 存个一部分。
    为什么不全存呢,如果全存,adhoc 查询很频繁,那么不就给 内存带来压力了。 
     
    当你第二次查询的时候,就保存这个执行计划。
     
    当你第三次运行的时候,就可以直接从cache 内读取出来执行计划。
      

  12.   

    开启optimize for ad hoc workloads可能会提升性能也可能没有效果或者影响性能,需要自己做测试。 查看缓存中是否有很多的AD HOC query参考下面文章中给出的脚步:
    http://www.sqlservercentral.com/articles/SQLServerCentral/91250/
      

  13.   

    开启'optimize for ad hoc workloads‘会有影响,影响就是你的第二步,所以答案是it depends.
    我知道有个原则,如果某个属性是可配置的,那必定有它适用跟不适用的地方,否则只有好处,没有害处的配置,那SQL SERVER一般是不会让你配置的。
      

  14.   

    “内存占用一直在97%(16g)”
    这在生产环境中很常见,并不是坏事。
    运行perfmon,查看Memory\Available MBytes计数器,在200-300M足已。