Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Wait Types

Termin Definicja
Wait Types

Wait Types to kategorie oczekiwań rejestrowane przez SQL Server, wskazujące na co czekają zapytania.

Czym są Wait Types w SQL Server

Wait Types to nazwy kategorii oczekiwania używane przez aparat wykonawczy Microsoft SQL Server. W czasie realizacji zapytanie albo wątek może nie wykonywać instrukcji procesora, ponieważ oczekuje na określone zdarzenie: zakończenie operacji wejścia-wyjścia, zwolnienie blokady, otrzymanie sygnału od innego wątku, dostęp do zasobu synchronizacyjnego albo dostarczenie danych przez równoległą część planu wykonania. Informacja o typie oczekiwania opisuje mechanizm, który zatrzymał postęp konkretnego zadania. Nie jest sama w sobie komunikatem o błędzie ani dowodem, że baza danych działa nieprawidłowo.

SQL Server rozróżnia między innymi czas oczekiwania na zasób oraz czas oczekiwania na przydzielenie procesora po uzyskaniu gotowości. W widoku sys.dm_exec_requests można sprawdzić bieżący wait_type, wait_time, wait_resource i blocking_session_id dla aktywnych żądań. Historyczne sumy oczekiwań są dostępne w sys.dm_os_wait_stats. Dane z tego widoku są agregowane od uruchomienia instancji albo od ostatniego wyzerowania statystyk, dlatego ich interpretacja wymaga uwzględnienia okresu pomiarowego.

Najczęstsze grupy oczekiwań

Oczekiwania związane z pamięcią i wejściem-wyjściem często wskazują, że wątek czeka na stronę danych albo zakończenie operacji dyskowej. Przykładem jest PAGEIOLATCH_SH, występujący przy oczekiwaniu na odczyt strony danych do pamięci, oraz PAGEIOLATCH_EX, używany przy oczekiwaniu związanym z dostępem do strony w trybie wyłącznym. Podwyższony czas tych oczekiwań może wynikać z dużej liczby odczytywanych stron, niewystarczającej pamięci, nieefektywnego planu zapytania lub opóźnień podsystemu dyskowego. Sam typ oczekiwania nie rozstrzyga, która z tych przyczyn występuje.

Oczekiwania blokad są raportowane jako LCK_M_S, LCK_M_X i inne warianty, zależnie od żądanego trybu blokady. Litera S oznacza blokadę współdzieloną, a X wyłączną. Dłuższe oczekiwanie tego rodzaju wymaga sprawdzenia relacji między sesją oczekującą i sesją blokującą, czasu trwania transakcji oraz instrukcji, które utrzymują blokady. Z kolei WRITELOG oznacza oczekiwanie na opróżnienie bufora dziennika transakcji do pliku logu. Wysokie wartości mogą mieć związek z intensywnym zapisem, wolnym magazynem logu albo zbyt częstymi operacjami wymuszającymi zapis dziennika.

Jak analizować statystyki oczekiwań

Analizę należy rozpocząć od rozdzielenia oczekiwań użytkowych od oczekiwań wewnętrznych i bezczynności. W sys.dm_os_wait_stats warto porównywać czas oczekiwania, liczbę oczekiwań oraz średni czas przypadający na jedno zdarzenie. Przydatną wartością pomocniczą jest signal_wait_time_ms, pokazująca czas, przez który wątek był gotowy do wykonania, lecz czekał na procesor. Różnica między całkowitym wait_time_ms a czasem sygnału opisuje okres oczekiwania na sam zasób. Wysokie oczekiwania procesora należy konfrontować z obciążeniem CPU, liczbą uruchomionych zapytań i planami wykonania.

Statystyki skumulowane nie powinny być interpretowane bez punktu odniesienia. Można zapisać stan początkowy widoku, odczekać określony przedział, a następnie obliczyć przyrosty. Do wyzerowania statystyk służy polecenie DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR), ale jego użycie usuwa dotychczasowy kontekst diagnostyczny i powinno być planowane, a nie wykonywane przypadkowo na produkcyjnej instancji. Równolegle trzeba analizować aktywne żądania, tekst SQL, plan wykonania, blokady i obciążenie zasobów. Ten sam Wait Type może być skutkiem zupełnie różnych problemów zależnie od zapytania i warunków pracy.

Znaczenie Wait Types w diagnostyce

Wait Types są wskaźnikiem zachowania silnika SQL Server, a nie gotową listą zaleceń naprawczych. Przykładowo wysokie CXPACKET lub CXCONSUMER może pojawić się przy planach wykorzystujących równoległość; jego interpretacja wymaga sprawdzenia kosztownego operatora, rozkładu pracy między wątkami oraz pozostałych metryk. Oczekiwania RESOURCE_SEMAPHORE wiążą się z oczekiwaniem na przydział pamięci wykonawczej dla zapytania, lecz przyczyną może być zarówno konkurencja o pamięć, jak i zapytanie żądające dużego obszaru roboczego. Zmiana ustawień bez analizy planów może więc jedynie przesunąć problem.

Rzetelna diagnostyka obejmuje porównanie oczekiwań z czasem trwania zapytań, blokowaniem, odczytami logicznymi, zapisami, użyciem procesora i opóźnieniami dysków. Należy także ustalić, czy obserwowany wzrost jest stałym wzorcem, czy krótkim zdarzeniem związanym z konkretną transakcją lub zadaniem. W środowisku z SQL Server przydatne jest zachowanie próbek z sys.dm_exec_requests, sys.dm_os_waiting_tasks i sys.dm_os_wait_stats oraz powiązanie ich z dokładnym czasem wystąpienia problemu. Dopiero taka korelacja pozwala odróżnić normalne oczekiwania robocze od przeciążenia, blokowania, niedoboru pamięci lub problemów z wejściem-wyjściem.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę