Czekaj, czekaj, czekaj
Chociaż aspekty wydajności i licencjonowania są interesujące, nie są to jedyne aspekty obciążenia do rozważenia.
Jedną z rzeczy, które mogą mieć wpływ na wybór procesora, są wątki robocze.
Wątki pracowników?
Jasne stary! Są to rzeczy, których użyje Twój SQL Server do uruchamiania twoich zapytań i robienia wszystkich rzeczy w tle, które muszą zrobić, aby utrzymać dobrą formę.
Kiedy zabraknie wątków roboczych, trafisz w THREADPOOL czeka
PULA WĄTKÓW?
PULA WĄTKÓW. To jeden z najgorszych oczekiwań, jakie możesz mieć na swoim serwerze, wraz z RESOURCE_SEMAPHORE i RESOURCE_SEMAPHORE_QUERY_COMPILE . Ale to pamięć czeka, a to jest pytanie procesora.
Wracając do tego, dlaczego to jest wiggity wack.
W ten sposób SQL Server oblicza wątki robocze :
Zauważ, że podwojenie liczby rdzeni nie podwaja maksymalnych wątków roboczych, a ty otrzymujesz taką samą liczbę z 1 rdzeniem jak z 4 rdzeniami? Równanie to:512 + ((logical CPUs - 4) * 16)
Szkoda, ponieważ gdy liczba rdzeni rośnie, szybkość zegara zwykle zmniejsza się o jedno lub dwa pokolenia wstecz.
Spojrzenie na jakąkolwiek ostatnią linię układów Intela pokaże podobny trend.
Skąd mam wiedzieć, ile wątków potrzebuję?
Będzie to bardzo zależeć od:
- Liczba użytkowników
- Liczba równoległych zapytań
- Liczba zapytań seryjnych
- Liczba baz danych i synchronizacja danych (Mirroring, AG, kopie zapasowe dla Log Log)
- Jeśli pozostawisz MAXDOP i CTFP na wartości domyślne
Jeśli dzisiaj ich nie zabraknie, prawdopodobnie nic ci nie jest.
Ale skąd wiesz, czy jesteś?
Są dobre pytania i są świetne pytania, i daj mi coś powiedzieć, to jest WIELKIE PYTANIE .
THREADPOOL może objawiać się jako problemy z połączeniem , aw dzienniku błędów mogą pojawić się komunikaty o niemożności odrodzenia wątku .
Możesz także spojrzeć na statystyki oczekiwania twojego serwera za pomocą darmowego narzędzia takiego jak sp_Blitz lub sp_BlitzFirst (pełne ujawnienie, przyczyniam się do tego projektu).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
Czy nie mogę po prostu zwiększyć wątków Max Worker?
Zwiększenie MWT może prowadzić do zwiększonego SOS_SCHEDULER_YIELD
oczekiwania.
To nie koniec świata, ale pomyśl o tym jak o dodaniu do klasy nauczyciela krzyczących dzieciaków.
Nagle każdemu dziecku będzie trudniej zwrócić na siebie uwagę.
Kiedy proces wyczerpie kwant 4ms , potencjalnie będzie więcej wątków przed nim, aby dostać się na procesor.
Wydajność może wydawać się mniej więcej taka sama.
Jak mogę użyć mniejszej liczby wątków roboczych?
Okrutnie [rzeczownik] rzeczownika, to pracownicy z rodzinami do wsparcia! Kredyty hipoteczne! Marzenia!
Ale w porządku, muszę uszanować wynik końcowy. Jesteś szefem.
Najprostszym miejscem do rozpoczęcia jest zmiana ustawień domyślnych, takich jak MAXDOP i próg kosztu dla równoległości.
Jeśli masz pytania dotyczące ich ustawienia, przejdź tutaj:
Potem twoja praca staje się znacznie trudniejsza. Musisz dowiedzieć się, co wykorzystuje wszystkie te wątki. Czasami możesz to zrobić, patrząc na statystyki oczekiwania.
Mówiąc dokładniej, jeśli masz wysokie oczekiwania na równoległość ( CXPACKET
) ORAZ wysokie oczekiwania na blokady ( LCK_
), możesz napotkać długie łańcuchy blokujące obejmujące równoległe zapytania.
Wiesz co śmierdzi? Podczas gdy wszystkie równoległe zapytania czekają na swoje blokady, nie zwracają przydzielonych wątków.
Prawie słyszysz tę czterordzeniową maszynę wirtualną, którą Twój administrator zapewnił, że jest więcej niż wystarczający do wykonania jakiegokolwiek wysiłku w celu złapania powietrza, co?
Niestety, rodzaj dostrajania zapytań i indeksów, który musisz wykonać, aby rozwiązać ten problem, wykracza poza zakres pytania.
Mam nadzieję że to pomoże!