Zaczynamy udostępniać zestaw serwerów fizycznych dla wirtualnego klastra węzłów SQL Server 2016 w VMware. Będziemy korzystać z licencji Enterprise Edition.
Planujemy skonfigurować 6 węzłów, ale trwa debata na temat tego, jaki jest najlepszy sposób zapewnienia serwerów fizycznych w odniesieniu do szybkości zegara procesora w porównaniu do liczby rdzeni procesora.
Wiem, że jest to w dużej mierze zależne od wielkości transakcji i liczby baz danych przechowywanych wśród innych czynników specyficznych dla oprogramowania, ale czy istnieje ogólna ogólna zasada, która jest zalecana?
Na przykład, czy podwójny 8-rdzeniowy serwer fizyczny 3,2 GHz (16 rdzeni) jest bardziej preferowany niż podwójny 16-rdzeniowy serwer 2,6 GHz (32 rdzenie)?
Czy ktoś natknął się na białą księgę, która bardziej zagłębia się w tego rodzaju temat?
źródło
Odpowiedzi:
Ogólna zasada polega na tym, aby liczba rdzeni była jak najniższa, a prędkość procesora tak wysoka, jak to możliwe. Matematyka licencjonowania tego dowodzi, że w wydaniu drogim wydanie wynosi ~ 7500 USD za rdzeń.
Zakup odpowiedniego sprzętu może zwrócić się w postaci niższych kosztów licencji. Zobacz temat Wybór procesora dla SQL Server autorstwa Glenna Berry'ego. To świetny zasób na temat wyboru procesora dla SQL Server.
Gdy weźmiesz pod uwagę strukturę licencjonowania na rdzeń programu SQL Server, warto zawsze korzystać z najszybszej dostępnej prędkości procesora, niezależnie od rodzaju obciążenia, czy to OLTP, czy analizy. Posiadanie najszybszej możliwej prędkości rdzenia nigdy nie będzie problemem. Zwiększ liczbę rdzeni zgodnie z wymaganiami, ale nigdy nie rób tego, zmniejszając szybkość rdzenia.
Innymi słowy, nie myśl, że procesory 16 x 2,2 GHz są takie same, jak procesory 8 x 4,5 GHz. Oszczędność kosztów korzystania z procesorów 2,2 GHz w porównaniu z procesorami 4,5 GHz prawdopodobnie wyniesie maksymalnie około 10 000 USD (w przypadku typowego dwuprocesorowego komputera z procesorem Xeon). Skok z 8 rdzeni na 16 rdzeni w programie SQL Server Enterprise Edition prawdopodobnie kosztuje ponad 60 000 USD opłat licencyjnych. Innymi słowy, możesz zaoszczędzić 10 000 USD na kosztach sprzętu, ale stracisz dodatkowe 50 000 USD na licencji.
Jeśli zdecydujesz, że potrzebujesz dużo równoległego przetwarzania mięśni, i zdecydujesz, że potrzebujesz 32 rdzeni do danego zadania, wybranie najszybszych rdzeni przyniesie dywidendy w skróconym czasie przetwarzania. Nikt nie będzie cię za to winił.
Powiedziawszy to wszystko, jeśli wybór ma jeden procesor lub więcej niż jeden procesor, zawsze korzystaj z więcej niż jednego . Uruchamianie programu SQL Server (lub dowolnego DBMS) na pojedynczym procesorze może powodować różnego rodzaju problemy, ponieważ możliwości jednoczesnych operacji są znacznie ograniczone.
źródło
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:
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:
Algorytm ustawiania MAXDOP dla SQL Server
Dlaczego próg kosztu dla równoległości nie powinien być ustawiony na 5
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!
źródło
Odpowiedź wiki społeczności :
Długa i krótka to: większość obciążeń dla SQL Server to OLTP, który korzysta z wyższych częstotliwości taktowania, ponieważ jest to działanie szeregowe.
O ile nie planujesz specjalnie dla systemu masowo równoległego, prędkości zegara zawsze wygrywają. Przypadki Edge istnieją, ale to jest odpowiedź w 95% przypadków. Fajne jest także to, że kosztuje mniej.
źródło
Odpowiedź sprowadza się do tego: zależy od twojego przypadku użycia.
Na przykład mam komputer czterordzeniowy, ale kompilator ESP8266 zużywa tylko 25% mojego procesora, ponieważ jest przeznaczony tylko do korzystania z jednego rdzenia. Gdybym miał 1 szybki rdzeń, byłoby to bardziej optymalne.
źródło