查询DMV sys.dm_os_performance_counters时返回零行


9

我有一个用户SQL Server 2014 Standard Edition (RTM)具有SYSADMIN与服务器视图状态权限的角色,但是当我执行DMV sys.dm_os_performance_counters返回没有记录。

知道权限有什么问题吗?

在此处输入图片说明

@@ Version的输出:

Microsoft SQL Server 2014-12.0.2000.8(X64)2014年2月20日20:04:26版权所有(c)Windows NT 6.3上的Microsoft Corporation标准版(64位)(内部版本9600 :)(管理程序)


在安装过程中很可能没有安装注册表计数器。如果用户具有sysadmin权限,则他不需要view server state运行sysadmin角色中包含的DMV的权限。鉴于以上情况,如果未返回任何行,则表示未安装性能计数器。
Shanky

@Shanky并非总是如此,还有两个可能的原因。我个人有注册表原因(在强化的安全环境中,安装过程中注册表更改显然未正确进行)
Reaces 2015年

Answers:


4

如果您确定相关用户具有此权限View Server State(看起来就像在您的屏幕快照中一样)。

然后,有很多原因以前都放在msdn博客中。范围:

  1. 在SQL Server安装过程中,性能对象和计数器设置失败。
  2. 64位和32位平台的混合。
  3. 注册表权限已倾斜

要解决此问题,我们可以使用指南中概述的相同步骤在不同的堆栈交换站中重新安装性能计数器

使用提升的管理员命令提示符,执行以下步骤。

  1. 将路径更改为BINN您要更正的SQL Server实例的目录。
    (例如:C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\Binn
  2. 执行unlodctr <<REGISTERED SERVER NAME>>
    例如:unlodctr MSSQL$SQL2008SQLAgent$SQL2008...
  3. 执行lodctr /T:<<perf-sql* matching the counters you desire to load>>
    例如:perf-MSSQL$SQL2008sqlctr.iniperf-SQLAgent$SQL2008sqlagtctr.ini对于SQLAgent。将/TSQL Server性能计数器提供程序加载为受信任的提供程序非常重要
  4. 循环远程注册表服务:
    net stop "Remote Registry"然后net start "Remote Registry"
  5. 使用winmgmt /resyncperfctr "<<PID>>"
    PID是的进程ID 强制进行WMI同步WinPriv.exe(可以从任务管理器中获取)

还可能需要以下内容:

  • 确保已将正确的安全权限授予了HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009
    注册表项:

    1. 向创建者所有者帐户授予完全控制权限。
    2. 向管理员帐户授予完全控制权限。
    3. 向该框/节点上的SQL管理员授予读取权限。
    4. 向系统帐户授予完全控制权限

此方法适用于SQL Server 2008,2014年适用吗?
AA.SC 2015年

@ AA.SC是的,该方法尚未更改AFAIK。
Reaces

@@ Reaces客户端将其系统RTM更新为SP1,这已解决了该问题。
AA.SC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.