sys.dm_os_performance_counters udostępnia liczniki wydajności SQL Server dostępne też przez Windows Performance Monitor.
Zastosowanie sys.dm_os_performance_counters w diagnostyce SQL Server
sys.dm_os_performance_counters jest serwerowym widokiem dynamicznym SQL Server, który udostępnia wartości liczników wydajności utrzymywanych przez silnik bazy danych. Te same lub odpowiadające im liczniki mogą być obserwowane z użyciem narzędzia Windows Performance Monitor, jednak DMV pozwala odczytywać je bezpośrednio za pomocą zapytania T-SQL, bez opuszczania środowiska SQL Server. Dzięki temu dane można łączyć z informacjami o bazach, sesjach, żądaniach i obiektach znajdujących się w tej samej instancji.
Widok nie przedstawia jednego zbiorczego wyniku opisującego ogólną „wydajność serwera”. Zwraca wiele wierszy reprezentujących różne obiekty liczników, liczniki oraz ich instancje. W zależności od wersji SQL Server, konfiguracji instancji i aktywnych składników dostępny zestaw może się różnić. Dlatego nazwy liczników powinny być filtrowane według wartości rzeczywiście zwróconych przez konkretną instancję, a nie zakładane wyłącznie na podstawie dokumentacji lub przykładowego zapytania.
Kolumny i interpretacja wartości licznika
Najważniejsze kolumny tego widoku to między innymi object_name, counter_name, instance_name, cntr_value oraz cntr_type. object_name identyfikuje grupę liczników, na przykład obszar związany z buforem, pamięcią, planami zapytań lub statystykami ogólnymi instancji. counter_name wskazuje konkretną metrykę, natomiast instance_name pozwala rozróżnić instancje obiektów, takie jak poszczególne bazy danych albo inne elementy monitorowanego składnika. Gdy licznik nie ma sensownej instancji, wartość tej kolumny może być pusta.
cntr_value jest surową wartością licznika, ale jej znaczenie zależy od typu określonego przez cntr_type. Niektóre liczniki pokazują bieżący stan, inne są licznikami narastającymi, a jeszcze inne wymagają obliczenia różnicy względem poprzedniego odczytu. W przypadku wartości narastającej pojedynczy odczyt nie jest zwykle gotową miarą szybkości ani procentem wykorzystania. Aby wyznaczyć zmianę w czasie, należy zapisać co najmniej dwa odczyty, obliczyć różnicę cntr_value i odnieść ją do czasu między pomiarami. Błędna interpretacja typu licznika może prowadzić do fałszywych wniosków o przeciążeniu lub poprawie działania instancji.
Filtrowanie danych i pomiary w czasie
Praktyczne zapytanie zwykle ogranicza wynik przez object_name i counter_name, ponieważ pełny zestaw liczników może być obszerny i zawierać wiele podobnych wierszy. Przy analizie liczników zależnych od bazy danych należy uwzględnić także instance_name. Samo wyszukanie fragmentu nazwy bez rozróżnienia instancji może połączyć wyniki różnych baz i zniekształcić obraz sytuacji. W zapytaniach diagnostycznych warto jawnie wyświetlać wszystkie kolumny identyfikujące licznik, a nie tylko jego wartość.
Odczyt DMV jest migawką stanu dostępnego w chwili wykonania zapytania. Widok nie tworzy automatycznie historii pomiarów i nie zastępuje systemu monitoringu. Jeżeli potrzebna jest analiza trendu, wartości trzeba cyklicznie pobierać do tabeli lub innego systemu obserwacyjnego wraz ze znacznikiem czasu. Następnie można porównywać kolejne próbki, wyliczać tempo zmian i zestawiać je z obciążeniem instancji, czasem trwania zapytań, oczekiwaniami na zasoby oraz aktywnością baz danych. Pojedynczy wysoki albo niski odczyt nie powinien być samodzielnie traktowany jako dowód konkretnej awarii.
Warto również pamiętać, że reset lub ponowne uruchomienie instancji może zmienić wartości liczników narastających. Po takim zdarzeniu pierwsza próbka nie zawsze nadaje się do bezpośredniego porównania z wcześniejszymi danymi. Mechanizm monitorujący powinien rozpoznawać przerwę w ciągłości pomiarów i rozpoczynać nowy odcinek porównawczy, zamiast obliczać różnicę pomiędzy nieporównywalnymi wartościami.
Uprawnienia i ostrożna diagnoza na poziomie instancji
Dostęp do informacji zwracanych przez serwerowe DMV jest kontrolowany przez uprawnienia SQL Server. W zależności od wersji silnika odczyt może wymagać uprawnienia VIEW SERVER STATE albo, w nowszych wersjach, uprawnienia przeznaczonego do obserwowania stanu wydajności serwera, czyli VIEW SERVER PERFORMANCE STATE. Dokładny wymagany poziom należy sprawdzić dla używanej wersji SQL Server i sposobu wdrożenia. Brak właściwego uprawnienia może uniemożliwić wykonanie zapytania albo ograniczyć dostępne informacje.
Interpretacja wyników powinna zawsze uwzględniać kontekst. Licznik jest wskaźnikiem obserwowanego zjawiska, a nie automatyczną diagnozą przyczyny. Na przykład zmiana wartości licznika może wynikać z rodzaju obciążenia, czasu od uruchomienia instancji, liczby aktywnych baz, operacji administracyjnych albo sposobu agregowania danych. Rzetelna analiza łączy wyniki sys.dm_os_performance_counters z innymi widokami dynamicznymi SQL Server oraz z obserwacją zasobów systemu Windows. W przypadku problemów z komputerem, na którym działa oprogramowanie bazodanowe, diagnostyka powinna rozdzielać objawy sprzętowe, systemowe i wynikające z konfiguracji samego silnika.