Szybkość zegara procesora a liczba rdzeni procesora - wyższa częstotliwość, czy więcej rdzeni dla programu SQL Server?

30

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?

PicoDeGallo
źródło
Jakie są Twoje obawy, wydajność w skrócie lub licencjonowanie i opłacalność?
Evan Carroll

Odpowiedzi:

40

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.

Max Vernon
źródło
11

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 :

ORZECHY

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.

ORZECHY

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

ORZECHY

EXEC sp_BlitzFirst @SinceStartup = 1

ORZECHY

Czy nie mogę po prostu zwiększyć wątków Max Worker?

Zwiększenie MWT może prowadzić do zwiększonego SOS_SCHEDULER_YIELDoczekiwania.

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!

Erik Darling
źródło
2

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.

użytkownik126897
źródło
-3

Odpowiedź sprowadza się do tego: zależy od twojego przypadku użycia.

  • Czy przetwarzasz wiele małych żądań na raz czy kilka dużych?
  • Czy uruchamiany program jest zoptymalizowany pod kątem obsługi wielu rdzeni?

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.

Ahmad Rashed
źródło
6
Witaj na stronie dba.stackexchange.com ! Twoja odpowiedź jest prawdziwa w bardzo ogólnym przypadku, ale nie koncentruje się na przypadkach SQL lub baz danych, o które prosi OP. Spróbuj go poprawić, zagłębiając się w tę sprawę! :)
xDaizu,