由于Server 内存占用很高本想看内存使用情况,但是发现下面几个计数器的值一直为0,我对比了别的Server的计数器的值都有值,难道需要开某个设定才能打开这几个计数器吗? 
在SQLServer:Memory Manager 和 SQLServer:Buffer Manager 中不是所有的计数器都显示为0,但我们想看的这几个不应为0才对!请问各位有什么建议?!
Window 2008 R2
SQL Server 2008 (10.0.4000)SELECT TOP 100 * FROM  sys.dm_os_performance_counters
where object_name ='SQLServer:Memory Manager'
and counter_name in ('Target Server Memory (KB)','Total Server Memory (KB)')
order by counter_nameSELECT TOP 100 * FROM  sys.dm_os_performance_counters
where object_name ='SQLServer:Buffer Manager' 
and counter_name in ('Target pages','Total pages','Database pages')
order by counter_name

解决方案 »

  1.   


    --我查都有记录哦
    object_name counter_name instance_name cntr_value cntr_type
    SQLServer:Memory Manager                                                                                                         Target Server Memory (KB)                                                                                                                                                                                                                                         8547936 65792
    SQLServer:Memory Manager                                                                                                         Total Server Memory (KB)                                                                                                                                                                                                                                          2020344 65792object_name counter_name instance_name cntr_value cntr_type
    SQLServer:Buffer Manager                                                                                                         Database pages                                                                                                                                                                                                                                                    15053 65792
    SQLServer:Buffer Manager                                                                                                         Target pages                                                                                                                                                                                                                                                      1068492 65792
    SQLServer:Buffer Manager                                                                                                         Total pages                                                                                                                                                                                                                                                       252543 65792
      

  2.   

    如果返回值为 0 行,表示性能计数器已被禁用。然后,您应该查看安装日志,搜索错误 3409,“请为此实例重新安装 sqlctr.ini,并确保实例登录帐户具有正确的注册表权限。”这说明性能计数器没有启用。紧邻 3409 错误之前的错误应该指示无法启用性能计数器的根本原因。
      

  3.   

    需要对服务器具有 VIEW SERVER STATE 权限。
      

  4.   


    已将 VIEW SERVER STATE 权限授予 SQLService的启动账号,并用语句确认过,但是还是没值!SELECT sp.name
    FROM   sys.server_principals sp
    WHERE  EXISTS (SELECT * 
                   FROM  sys.server_permissions perm
                   WHERE perm.grantee_principal_id = sp.principal_id
                     AND  permission_name = 'VIEW SERVER STATE')
      

  5.   


    我不是MSDN上说的SELECT COUNT(*) from sys.dm_os_performance_counters 
    无返结果的问题
    在SQLServer:Memory Manager 中这些计数器值就不为0
     Lock Blocks Allocated           
     Lock Owner Blocks Allocated
     Lock Blocks      
     Lock Owner Blocks
      

  6.   

    SQLServer2008R2安装中性能计数器检测失败的解决办法 http://www.xgaudit.gov.cn/html/07/20121121/2671.html
      

  7.   

    我查询了一下,我的sql server 2008r2能返回值。你看看windows上的性能计数器吧,在运行中输入:perfmon,能不能看到SQL Server:Buffer Manager:
      

  8.   

    先看看perfmon 的windows性能监视器中的有没有值,如果有值,就看看windows性能计数器中的把
      

  9.   

    我的SQLServer能安装完成应该性能计数器的检测是通过的?! 对注册表不是很能看懂,我的Perflib的下只有 009 ,Perflib 的Last Counter=12146,last help=12147. 而009 中counter的Power=2248,help中没有找到Power的值,这有问题吗?
      

  10.   

    Windows Perfmon 中SQLServer:Buffer Manager下的那几个计数器SQL中的一样,有值的还是有值,一直显示为0 的还是显示为0
      

  11.   

    MSDN 对视图的cntr_type列的说明 :Windows 性能体系结构定义的计数器类型。 有关性能计数器类型的详细信息,请参阅 MSDN 上的 WMI Performance Counter Types(WMI 性能计数器类型)或 Windows Server 文档。 
     
    这让我联想到了另一个问题 ,我有用WMI远程抓一些Server的性能数据,但因为Server的CPU processor数大于32个,在Windows Log中一直存在EventID:2006的报错(http://support.microsoft.com/kb/2279566)
    不知道2个问题间是否存在联系?从Windows Perfrmon 和 SQL 来看 ,缺失'Target pages','Total pages','Database pages'等计数器的值,是否会对SQLOS 对内存管理有影响,因为用其他工具发现在SQL占用的内存在慢慢超过SQL中设置的最大内存值 !
      

  12.   


    你说的:“SQL占用的内存在慢慢超过SQL中设置的最大内存值”  ,是完全有可能的。因为max server memory指的只是buffer pool中的内存,包含了数据库页、stolen pages中的单页,而不包含stolen pages中的multi-pages。所以如果是total pages(这个就是最大服务器内存) + multi-pages的话,总的大小就完全超过了max server memory了哈
      

  13.   

    对了 ,我看了一下这个文章:
    http://support.microsoft.com/kb/2279566里面说到:在windows server 2008r2计算机上且超过了32个cpu时,32位程序不能查询“服务器工作队列”计数器。里面讲到要像解决,可以考虑把应用程序升级到64位的。但是很奇怪,难道你的系统是32位的吗?
      

  14.   

    我的 Windows 和SQL 都是64bit的。因为虽然一直有这个报错,但是并不影响我抓数据就一直没管它,但是我尝试过将远程抓WMI数据的程序编译成64bit的,但是还有这个报错。