| Termin | Definicja |
|---|---|
| SYS.DM_OS_THREADS | sys.dm_os_threads pokazuje informacje o wątkach systemowych wykorzystywanych przez instancję. SYS.DM_OS_THREADS — czym jest ten widok diagnostycznySYS.DM_OS_THREADS to dynamiczny widok zarządzania w systemie SQL Server, przeznaczony do obserwowania wątków tworzonych i wykorzystywanych przez instancję. Wątek należy rozumieć jako jednostkę wykonawczą obsługiwaną przez system operacyjny. To właśnie za pomocą wątków realizowane są między innymi zadania sesji użytkowników, operacje wejścia i wyjścia, prace pomocnicze silnika, komunikacja między komponentami oraz czynności związane z obsługą procesów wewnętrznych. Odczyt z tego widoku nie przedstawia pełnego obrazu zapytania ani całej historii obciążenia. Pokazuje stan obserwowany w określonym momencie, dlatego wynik powinien być traktowany jako fotografia pracy instancji. Przy analizie problemu przydatne jest wykonanie kilku odczytów w odstępach czasu i zestawienie ich z informacjami o sesjach, żądaniach, zadaniach, oczekiwaniach oraz wykorzystaniu procesora. Pojedynczy wiersz może opisywać wątek należący do głównego procesu SQL Server, a jego znaczenie zależy od pozostałych kolumn i bieżącego kontekstu działania. Widok tego rodzaju jest szczególnie przydatny wtedy, gdy występuje podejrzenie nieprawidłowego rozdzielenia pracy pomiędzy zadania i wątki, pojawiają się długotrwałe oczekiwania albo proces SQL Server zużywa więcej zasobów procesora, niż wynikałoby to z liczby aktywnych zapytań. Sam odczyt nie stanowi jednak diagnozy. Wymaga połączenia z obserwacją obciążenia komputera, konfiguracji instancji, rodzaju wykonywanych operacji i czasu trwania problemu. SYS.DM_OS_THREADS a sesje, zadania i żądaniaW diagnostyce SQL Server często pojawia się pytanie, dlaczego liczba sesji nie odpowiada liczbie wątków. Wynika to z różnicy poziomów opisu. Sesja identyfikuje połączenie z instancją, żądanie opisuje aktualnie wykonywaną pracę, zadanie jest jednostką pracy planowaną przez silnik, natomiast wątek systemowy jest mechanizmem wykonawczym widzianym od strony systemu operacyjnego. Jedno żądanie może korzystać z kilku zadań, a zadania mogą być obsługiwane przez różne wątki w zależności od planu wykonania i dostępności zasobów. Przy analizie odczytu z SYS.DM_OS_THREADS warto porównywać dane z widokami dotyczącymi zadań oraz aktywnych żądań. Pozwala to ustalić, czy zaobserwowany wątek wykonuje pracę użytkową, czeka na zasób, realizuje operację pomocniczą, czy pozostaje w stanie oczekiwania. Znaczenie ma również identyfikator procesu systemowego, identyfikator wątku, stan wykonania, priorytet oraz informacje o tym, jaki fragment pracy został przypisany do danego wykonawcy. Nie należy utożsamiać dużej liczby wątków z awarią. Instancja może utrzymywać wiele wątków gotowych do obsługi różnych zadań, nawet gdy w danej chwili tylko część z nich intensywnie korzysta z procesora. Niepokój powinien wzbudzać dopiero szerszy zestaw objawów, na przykład powtarzalne skoki użycia procesora, rosnące czasy odpowiedzi, zablokowane żądania, długie kolejki oczekujących zadań lub widoczna zależność pomiędzy konkretnym typem pracy a przeciążeniem. Ważne jest również rozróżnienie między stanem wątku a stanem żądania. Wątek może oczekiwać, podczas gdy żądanie nadal pozostaje aktywne. Z kolei chwilowe zajęcie procesora nie musi oznaczać błędu, jeżeli odpowiada prawidłowemu etapowi obliczeń. Wnioski powinny być formułowane dopiero po sprawdzeniu powtarzalności zjawiska i jego wpływu na działanie aplikacji. SYS.DM_OS_THREADS — typowe problemy widoczne w praktyceJednym z częstych przypadków jest wzrost liczby aktywnych wątków podczas obsługi dużej liczby równoczesnych połączeń. Każde połączenie może uruchamiać zadania wymagające dostępu do procesora, pamięci, dysku albo innych elementów środowiska. Gdy napływ pracy przekracza możliwości bieżącej konfiguracji, część zadań czeka, a czas odpowiedzi zaczyna się wydłużać. W takim scenariuszu sam widok SYS.DM_OS_THREADS pomaga określić skalę zjawiska, lecz nie wskazuje automatycznie, który element należy zmienić. Inny problem stanowią długotrwałe oczekiwania. Wątek pozostający w oczekiwaniu może być skutkiem wolnego nośnika danych, blokady, ograniczenia pamięci, przeciążenia procesora albo opóźnienia w komunikacji. Przydatne jest wtedy ustalenie rodzaju oczekiwania oraz powiązanie go z konkretnym żądaniem. Jeżeli wiele wątków czeka na ten sam zasób, przyczyny należy szukać wąskim gardłem wspólnym dla tych operacji, a nie w pojedynczym wierszu wyniku. Problemy mogą także wynikać z nieprawidłowego ustawienia liczby wątków roboczych, nieefektywnych planów wykonania, zbyt dużej liczby równoległych operacji lub błędów aplikacji powodujących lawinowe otwieranie połączeń. W przypadku pracy równoległej większa liczba wątków może przyspieszyć wykonanie pojedynczego zadania, ale przy nadmiernej konkurencji może zwiększyć koszty przełączania i ograniczyć zasoby dostępne dla innych operacji. Ocena powinna uwzględniać wielkość obciążenia, charakter zapytań i zachowanie całego systemu. Do błędnych interpretacji należy zaliczyć uznanie każdego długo żyjącego wątku za zawieszony. Niektóre wątki pomocnicze działają przez cały czas życia instancji i ich obecność jest normalna. Podobnie nie każda zmiana identyfikatora wątku oznacza problem, ponieważ system może przydzielać pracę różnym wykonawcom. Dopiero korelacja z czasem, stanem oczekiwania, użyciem procesora i objawami po stronie użytkownika pozwala przygotować wiarygodne rozpoznanie. SYS.DM_OS_THREADS — praktyczne wskazówki do odczytuPrzed rozpoczęciem analizy warto zapisać moment wykonania zapytania, zakres obserwacji i objawy zgłaszane przez użytkowników. Następnie przydatne jest wykonanie serii odczytów zamiast jednorazowego sprawdzenia. W każdym pomiarze powinno się zachować informacje o aktywnych żądaniach, oczekiwaniach, użyciu procesora oraz czasie trwania operacji. Taki materiał pozwala odróżnić stałą zależność od krótkiego, naturalnego wzrostu obciążenia. Podczas interpretacji należy zwrócić uwagę na następujące elementy:
Nie powinno się zmieniać konfiguracji wyłącznie na podstawie liczby wierszy zwróconych przez SYS.DM_OS_THREADS. Najpierw należy ustalić, jaki skutek ma dana konfiguracja i czy zmiana rozwiązuje przyczynę, czy tylko przesuwa obciążenie w inne miejsce. Warto także zachować wynik sprzed modyfikacji, opisać wykonane działanie i ponowić pomiary po zmianie. Ułatwia to wycofanie nietrafionej decyzji oraz porównanie rezultatów. Przydatne bywa filtrowanie danych według identyfikatora procesu, identyfikatora wątku, stanu lub informacji o przypisanym zadaniu. Należy jednak zachować ostrożność przy interpretowaniu wartości, które zmieniają się dynamicznie. Odczyt wykonany w trakcie krótkiego skoku może nie odzwierciedlać typowego obciążenia. Dla problemów okresowych lepsze jest rejestrowanie próbek w kilku momentach i opisanie warunków, w których każda próbka została pobrana. Kiedy zgłosić SYS.DM_OS_THREADS do serwisu komputerowegoDo serwisu warto zgłosić problem wtedy, gdy obserwacja SYS.DM_OS_THREADS zbiega się z wyraźnym spowolnieniem pracy, zawieszaniem aplikacji, częstymi przerwami w dostępie do danych, nietypowym hałasem układu chłodzenia albo powtarzalnym przeciążeniem komputera. Szczególnie pomocne jest przekazanie daty i godziny wystąpienia problemu, informacji o wykonywanej operacji oraz zapisanych wyników diagnostycznych. Pozwala to powiązać zachowanie oprogramowania ze stanem sprzętu i środowiska pracy. Warszawskie Pogotowie Komputerowe 24/7 zajmuje się analizą problemów związanych z działaniem komputerów i laptopów, w tym sytuacji, w których nieprawidłowa praca aplikacji może wynikać z przeciążenia zasobów, błędów konfiguracji, problemów z pamięcią, nośnikiem danych albo chłodzeniem. Przed rozpoczęciem naprawy przeprowadzana jest ocena objawów i zależności między oprogramowaniem a sprzętem, aby nie ograniczać rozpoznania do jednego odczytu diagnostycznego. Przy zgłoszeniu warto opisać, czy problem występuje po uruchomieniu konkretnego programu, podczas pracy wielu użytkowników, przy odczycie danych, zapisie plików czy wykonywaniu wymagających obliczeń. Znaczenie ma również informacja, czy po ponownym uruchomieniu sytuacja chwilowo się poprawia i po jakim czasie objawy wracają. Tak przygotowany opis ułatwia odtworzenie warunków oraz ocenę, czy źródłem trudności jest sam SQL Server, system operacyjny, sprzęt, sieć czy aplikacja korzystająca z bazy. SYS.DM_OS_THREADS należy więc traktować jako jeden z elementów szerszej diagnostyki. Dostarcza wartościowych informacji o sposobie wykonywania pracy przez instancję, ale pełna ocena wymaga zestawienia tych danych z żądaniami, zadaniami, oczekiwaniami i zachowaniem komputera. Dopiero taki obraz pozwala odróżnić normalne działanie od sytuacji wymagającej dalszej kontroli lub naprawy. |