Rzędy zerowe zwracają się po zapytaniu DMV sys.dm_os_performance_counters

9

Mam użytkownika SQL Server 2014 Standard Edition (RTM)z SYSADMINrolą z uprawnieniami do wyświetlania serwera, ale po uruchomieniu DMV sys.dm_os_performance_countersnie zwraca rekordu.

Masz pojęcie, co jest nie tak z uprawnieniami?

wprowadź opis zdjęcia tutaj

Dane wyjściowe wersji @@:

Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 20 lutego 2014 20:04:26 Copyright (c) Microsoft Corporation Standard Edition (64-bit) na Windows NT 6.3 (kompilacja 9600:) (Hypervisor)

AA.SC
źródło
Jest całkiem możliwe, że podczas instalacji liczniki rejestru nie zostaną zainstalowane. Jeśli użytkownik ma sysadminpozwolenie, nie wymaga view server statepozwolenia na uruchomienie DMV zawartego w roli sysadmin. W świetle powyższego, jeśli nie zostaną zwrócone żadne wiersze, oznacza to, że liczniki perfmon nie są zainstalowane.
Shanky
@Shanky Nie zawsze są jeszcze 2 możliwe powody. Osobiście miałem powody związane z rejestrem (w zaostrzonym środowisku bezpieczeństwa, gdzie najwyraźniej zmiany rejestru podczas instalacji nie przebiegły prawidłowo)
Reaces

Odpowiedzi:

4

Jeśli jesteś pewien, że dany użytkownik ma View Server State(i wygląda na to, że tak jest na twoim zrzucie ekranu).

Następnie istnieje wiele powodów wcześniej umieszczonych na blogu msdn. Od:

  1. Konfigurowanie obiektów wydajności i liczników podczas instalacji programu SQL Server nie powiodło się.
  2. Mieszanka platform 64 i 32-bitowych.
  3. Uprawnienia do rejestru zostały wypaczone

Aby rozwiązać ten problem, możemy wykonać te same kroki opisane w wytycznych dotyczących ponownej instalacji liczników wydajności w innym poście do wymiany stosów:

Za pomocą wiersza polecenia administratora z podwyższonym poziomem uprawnień wykonaj następujące czynności.

  1. Zmień ścieżkę do BINNkatalogu wystąpienia programu SQL Server, który chcesz poprawić.
    (Np C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\Binn)
  2. Wykonaj unlodctr <<REGISTERED SERVER NAME>>
    Na przykład: unlodctr MSSQL$SQL2008lub SQLAgent$SQL2008...
  3. Wykonaj lodctr /T:<<perf-sql* matching the counters you desire to load>>
    Na przykład: perf-MSSQL$SQL2008sqlctr.inilub perf-SQLAgent$SQL2008sqlagtctr.inidla SQLAgent. /TWażne jest, aby załadować dostawcę licznika wydajności SQL Server jako zaufanego dostawcy .
  4. Uruchom zdalną usługę rejestru:
    net stop "Remote Registry"następnienet start "Remote Registry"
  5. Wymuś synchronizację WMI przy użyciu winmgmt /resyncperfctr "<<PID>>"
    gdzie PID jest identyfikatorem procesu WinPriv.exe(możesz to uzyskać z Menedżera zadań)

Mogą być również wymagane:

  • Upewnij się, że HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009
    kluczowi rejestru udzielono odpowiednich uprawnień bezpieczeństwa :

    1. Przyznaj uprawnienia Pełna kontrola do konta właściciela twórcy.
    2. Przyznaj uprawnienia Pełna kontrola do konta Administratorzy.
    3. Przyznaj uprawnienia do odczytu administratorom SQL w tym polu / węźle.
    4. Przyznaj uprawnienia Pełna kontrola do konta systemowego
Reaces
źródło
ta metoda jest dla SQL Server 2008 czy to samo dla 2014?
AA.SC
@ AA.SC Tak, metoda nie zmieniła AFAIK.
Reaces
@@ Klient Reaces zaktualizował swój system RTM do wersji SP1, co rozwiązało problem.
AA.SC