Zero Rows return on query DMV sys.dm_os_performance_counters

9

J'ai un utilisateur SQL Server 2014 Standard Edition (RTM)avec un SYSADMINrôle avec des autorisations d'état d'affichage du serveur, mais lorsque j'exécute DMV, sys.dm_os_performance_countersil ne renvoie aucun enregistrement.

Une idée de ce qui ne va pas avec les autorisations?

entrez la description de l'image ici

Sortie de @@ version:

Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 20 février 2014 20:04:26 Copyright (c) Microsoft Corporation Standard Edition (64 bits) sur Windows NT 6.3 (Build 9600:) (Hyperviseur)

AA.SC
la source
Il est tout à fait possible que lors de l'installation, les compteurs de registre ne soient pas installés. Si l'utilisateur a l' sysadminautorisation, il n'a pas besoin de l' view server stateautorisation d'exécuter le DMV son inclus dans le rôle sysadmin. À la lumière de ce qui précède, si aucune ligne n'est renvoyée, cela signifie que les compteurs perfmon ne sont pas installés.
Shanky
@Shanky Pas toujours, il y a 2 autres raisons possibles. J'ai personnellement eu les raisons du registre (dans un environnement de sécurité renforcé où apparemment les modifications du registre lors de l'installation n'ont pas été correctement effectuées)
Reaces

Réponses:

4

Si vous êtes sûr que l'utilisateur en question l'a fait View Server State(et cela ressemble à votre capture d'écran, il le fait).

Ensuite, il y a un certain nombre de raisons précédemment mises dans un blog msdn. Allant de:

  1. La configuration des objets de performance et des compteurs lors de l'installation de SQL Server a échoué.
  2. Un mélange de plates-formes 64 et 32 ​​bits.
  3. Les autorisations de registre ont été faussées

Pour résoudre ce problème, nous pouvons utiliser les mêmes étapes décrites dans les instructions pour réinstaller les compteurs de performances dans un autre poste d'échange de pile:

À l'aide d'une invite de commandes administrateur élevée, procédez comme suit.

  1. Modifiez le chemin d'accès au BINNrépertoire de l'instance SQL Server que vous souhaitez corriger.
    (Ex: C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\Binn)
  2. Exécuter unlodctr <<REGISTERED SERVER NAME>>
    Par exemple: unlodctr MSSQL$SQL2008ou SQLAgent$SQL2008...
  3. Exécuter lodctr /T:<<perf-sql* matching the counters you desire to load>>
    Par exemple: perf-MSSQL$SQL2008sqlctr.iniou perf-SQLAgent$SQL2008sqlagtctr.inipour SQLAgent. Il /Test important de charger le fournisseur de compteurs de performances SQL Server en tant que fournisseur approuvé .
  4. Cycle le service de registre distant:
    net stop "Remote Registry"puisnet start "Remote Registry"
  5. Forcer une synchronisation WMI en utilisant winmgmt /resyncperfctr "<<PID>>"
    où PID est l'ID de processus du WinPriv.exe(vous pouvez l'obtenir auprès du Gestionnaire des tâches)

Les éléments suivants peuvent également être requis:

  • Assurez-vous que les autorisations de sécurité correctes ont été accordées à la HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009
    clé de registre:

    1. Accordez des autorisations Contrôle total au compte Propriétaire créateur.
    2. Accordez des autorisations Contrôle total au compte Administrateurs.
    3. Accordez des autorisations de lecture aux administrateurs SQL sur cette boîte / nœud.
    4. Accorder des autorisations de contrôle total au compte système
Reaces
la source
cette méthode est pour SQL Server 2008 est-ce la même chose pour 2014?
AA.SC
@ AA.SC Oui, la méthode n'a pas changé AFAIK.
Réagit du
Le client @@ Reaces a mis à jour son système RTM vers SP1, ce qui a résolu le problème.
AA.SC