Prefiks sys.dm_ oznacza widoki dynamicznego zarządzania, udostępniające bieżący stan wewnętrzny SQL Server.
Co oznacza prefiks sys.dm_ w SQL Server
Prefiks sys.dm_ w Microsoft SQL Server wskazuje obiekty systemowe służące do obserwowania bieżącego stanu silnika, baz danych, sesji, zapytań, blokad, pamięci, operacji wejścia-wyjścia oraz innych elementów środowiska wykonawczego. Skrót DMV pochodzi od angielskiego określenia Dynamic Management Views, czyli dynamicznych widoków zarządzania. W praktyce część obiektów ma postać widoku, a część funkcji tabelarycznej. Dlatego określenie DMV bywa stosowane szerzej, także wobec dynamicznych funkcji zarządzania, mimo że technicznie funkcję rozpoznaje się po sposobie wywołania.
Dane zwracane przez obiekty sys.dm_ zwykle opisują stan aktualny albo statystyki gromadzone od uruchomienia instancji, odłączenia bazy lub innego zdarzenia resetującego licznik. Nie są one typowymi tabelami aplikacyjnymi i nie służą do przechowywania własnych rekordów. Wynik zapytania może zmieniać się między kolejnymi odczytami, ponieważ zależy od aktywności sesji, planów wykonania, oczekiwań, obciążenia procesora i operacji dyskowych.
Grupy informacji dostępne przez obiekty DMV
SQL Server udostępnia wiele grup dynamicznych obiektów zarządzania. Obiekty z rodziny sys.dm_exec_ dotyczą wykonywania zapytań i sesji. Przykładowo sys.dm_exec_requests pokazuje żądania aktualnie wykonywane przez instancję, w tym identyfikator sesji, stan, typ oczekiwania, czas rozpoczęcia i użycie zasobów. sys.dm_exec_sessions opisuje sesje, natomiast sys.dm_exec_connections dostarcza informacji o połączeniach sieciowych. sys.dm_exec_query_stats zawiera zagregowane statystyki wykonania zapytań powiązane z planami znajdującymi się w pamięci podręcznej.
Obiekty takie jak sys.dm_os_waiting_tasks pomagają ustalić, na jakie zasoby oczekują zadania. sys.dm_tran_locks pokazuje blokady utrzymywane i żądane przez transakcje, a sys.dm_tran_active_transactions informacje o aktywnych transakcjach. Dla konkretnej bazy przydatne są między innymi sys.dm_db_index_usage_stats, sys.dm_db_index_operational_stats oraz sys.dm_db_partition_stats. Pozwalają one analizować użycie indeksów, operacje na strukturach indeksowych i liczbę stron zajmowanych przez partycje. Każdy obiekt należy interpretować zgodnie z jego dokumentacją, ponieważ zakres danych, resetowanie liczników i wymagane uprawnienia nie są identyczne dla wszystkich DMV.
Przykłady zapytań do analizy stanu instancji
Do znalezienia aktualnie wykonywanych żądań można użyć zapytania łączącego sys.dm_exec_requests z funkcją sys.dm_exec_sql_text. Przykładowa forma jest następująca: SELECT r.session_id, r.status, r.command, r.cpu_time, r.total_elapsed_time, r.wait_type, r.blocking_session_id, t.text FROM sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t WHERE r.session_id <> @@SPID;. Kolumna blocking_session_id może wskazać sesję blokującą, natomiast wait_type informuje o rodzaju oczekiwania zarejestrowanego dla żądania. Brak wierszy po odfiltrowaniu własnej sesji oznacza, że w chwili odczytu nie było innych aktywnych żądań spełniających warunek.
Do sprawdzenia oczekujących zadań można wykorzystać sys.dm_os_waiting_tasks, na przykład: SELECT session_id, wait_duration_ms, wait_type, blocking_session_id, resource_description FROM sys.dm_os_waiting_tasks;. Taki wynik jest migawką sytuacji w momencie wykonania zapytania. Pojedyncze oczekiwanie nie przesądza jeszcze o awarii, ponieważ SQL Server prawidłowo czeka między innymi na blokadę, zakończenie operacji wejścia-wyjścia albo przydzielenie zasobu. Znaczenie ma powtarzalność, długość oczekiwania, powiązanie z konkretnym żądaniem oraz zgodność z objawami obserwowanymi przez użytkowników.
Ograniczenia interpretacji i zastosowanie w diagnostyce
Wynik DMV nie powinien być analizowany bez uwzględnienia czasu pomiaru i zakresu obiektu. Statystyki z sys.dm_exec_query_stats odnoszą się do wpisów zachowanych w pamięci podręcznej planów, więc mogą zniknąć po usunięciu planu, restarcie usługi lub innych operacjach wpływających na cache. Z kolei statystyki użycia indeksów mogą być resetowane po ponownym uruchomieniu instancji. Oznacza to, że warto zapisać moment pomiaru i porównywać kolejne próbki, zamiast wyciągać wnioski z jednego odczytu.
Dostęp do poszczególnych DMV zależy od wersji SQL Server, poziomu obiektu oraz posiadanych uprawnień. Niektóre informacje wymagają uprawnień obejmujących obserwowanie stanu instancji, a inne są dostępne w kontekście bieżącej bazy. DMV może ujawnić identyfikatory sesji, tekst zapytania, plan wykonania, blokady lub informacje o zasobach, ale sam odczyt nie naprawia problemu. W rzetelnej diagnostyce wynik porównuje się z logami SQL Server, czasem wystąpienia opóźnienia, aktywnymi transakcjami, konfiguracją bazy i rzeczywistym obciążeniem procesora oraz dysków. Dzięki temu prefiks sys.dm_ jest rozpoznawany jako punkt dostępu do danych diagnostycznych, a nie jako nazwa pojedynczego mechanizmu naprawczego.