Skalowanie PostgreSQL do 64 rdzeni?

10

W tym artykule Computer World określa, że ​​PostgreSQL może być skalowany do limitu rdzenia 64. Czy to oznacza, że ​​dla jednego wielordzeniowego procesora 64 rdzeni? A może wiele procesorów z mniejszą liczbą rdzeni?

Powodem, dla którego pytam, jest to, że staram się ustalić, do ilu procesorów PostgreSQL może być skalowane, ale oczywiście może to być ograniczone do rodzaju procesora. Znalazłem jednak inne statystyki w innych bazach danych (np. Microsoft SQL Server , który mówi, że może skalować do 320 procesorów logicznych) i nie określają ich liczby rdzeni. Czy to bardzo niejasna statystyka?

Wszelkie myśli będą mile widziane. Dzięki!

O_O
źródło
1
PostgreSQL nie dba o to, czy jest to 8 8-rdzeniowych procesorów, 32 2-rdzeniowe procesory, czy cokolwiek innego. Dba tylko o procesory logiczne. Ponadto 64 rdzenie są przybliżone i zależą od reszty sprzętu; 64 rdzenie nic ci nie pomogą, jeśli masz tylko 4 GB pamięci RAM dla bazy danych 1 TB na dysku twardym SATA 7200 obr./min. Nie ma twardego technicznego ograniczenia liczby rdzeni, po prostu został niedawno przetestowany i udowodniono, że dobrze skaluje się do 64.
Craig Ringer

Odpowiedzi:

7

Nie, to bardzo dokładna statystyka. „Procesor logiczny” jest rdzeniem. Najważniejsze jest to, że nie ma znaczenia, w jaki sposób są one rozmieszczone na procesorach fizycznych.

A jeśli masz do czynienia z maszyną z większą liczbą rdzeni niż obsługiwana liczba, nie powinno to stanowić problemu w PostgreSQL. Każde połączenie jest z natury jednowątkowe *, więc niezależnie od liczby posiadanych rdzeni ograniczy wydajność i efektywność jednoczesnych połączeń.

Nie trzeba dodawać, że oznacza to również, że powinieneś wkładać pieniądze w szybsze rdzenie niż w liczbę rdzeni, chyba że chcesz skupić rzeczy w bardziej skomplikowany sposób.

* Aktualizacja 2017: Niektóre zapytania (lub podkwerendy) mogą być wykonywane równolegle .

Oli
źródło
1
Needless to say this also means you should put your money in faster cores than quantity of cores unless you want to cluster things in a more complicated method.<- Zgadzam się z tym stwierdzeniem tylko wtedy, gdy liczba rdzeni jest większa niż liczba równoczesnych klientów, a liczba współbieżnych klientów raczej nie wzrośnie. Bardzo ważne jest, aby wydajność miała rdzeń dostępny dla każdego zaplecza Postgres ...
voretaq7
@ voretaq7 W większości się zgadzam, ale procesor z wyższym TPS może (oczywiście) obsłużyć więcej transakcji w danym czasie, dlatego więcej klientów. Będzie miejsce, które zależy od rodzaju ładunku i budżetu.
Oli
1
proces logiczny jest najmniejszą logiczną jednostką wykonawczą, przy obecnych technologiach nie jest to rdzeń, lecz wątek.
dyasny
2
@ voretaq7: Nie jest rzadkie łączenie się z postgresql za pomocą mechanizmu puli połączeń. Dzieje się tak między innymi dlatego, że połączenie z postgresql jest stosunkowo drogie. Pula danych może znacznie zmniejszyć liczbę równoczesnych połączeń z bazą danych. Dlatego wolę szybkie procesory niż liczbę rdzeni. Ale jak zawsze: zależy to od wielu czynników ...
m.sr
2
@ m.sr Agreed - mechanizmy łączenia połączeń są bardzo powszechne. „Najmądrzejszy” z nich rozdzieli kilka połączeń z Postgres i zrównoważy między nimi (jedna z naszych wewnętrznych aplikacji robi to, dając każdemu procesowi Apache swoje własne połączenie z Postgres - całkiem wygodne mapowanie dla naszego przypadku użycia z rozsądnym zapleczem stosunek liczby użytkowników). IMHO, jeśli twoja pula połączeń tworzy kolejki zapytań zamiast odradzania backendów, nie robi ci to żadnych korzyści, ale zalety i wady byłyby bardziej interesujące, aby zagłębić się w Administratorów baz danych . Więc zapytałem!
voretaq7,
12

Postgres może skalować się do dowolnej liczby procesorów, którą chcesz zainstalować, a Twój system operacyjny może efektywnie obsługiwać / zarządzać. Możesz zainstalować Postgres na maszynie 128-rdzeniowej (a nawet na maszynie ze 128 procesorami fizycznymi) i będzie działać dobrze. To może nawet lepiej niż na maszynie 64 rdzenia jeśli harmonogram OS może obsłużyć że wielu rdzeni.

Wykazano, że Postgres skaluje się liniowo do 64 rdzeni (z zastrzeżeniami: mówimy o wydajności odczytu, w określonej konfiguracji (dysk, pamięć RAM, system operacyjny itp.) - Robert Haas ma artykuł na blogu z ładnym wykresem który Przedstawiłem poniżej:

wprowadź opis zdjęcia tutaj

Co jest ważne w tym wykresie?

Zależność jest liniowa (lub prawie taka), o ile liczba klientów jest mniejsza lub równa liczbie rdzeni , a następnie zaczyna się to, co wydaje się być w przybliżeniu log-liniowy spadek wydajności, jak masz więcej połączeń klienckich niż ty wykonaj rdzenie, aby uruchomić backendy Postgres, ponieważ backend zaczyna walczyć o procesor (średnia obciążenie przekracza 1,0 itd.).

Chociaż było tylko wykazane dla maksymalnie 64 rdzeni, możesz uogólnić, że możesz nadal dodawać rdzenie (i klientów) i dalej zwiększać wydajność, aż do limitu niektórych innych podsystemów (dysk, pamięć, sieć), w których procesy już nie są problemy z rywalizacją z procesorem, ale zamiast tego czekają na coś innego.

( Haas ma również inny artykuł, w którym udowodniono skalowalność liniową do 32 rdzeni, która zawiera świetny materiał odniesienia na temat skalowalności w ogóle - wysoce zalecane czytanie w tle!)

voretaq7
źródło
2
Nawiasem mówiąc, przyczyna tej liniowej skalowalności została wspomniana w odpowiedzi Oli : Postgres używa osobnego procesu zaplecza dla każdego połączenia klienta. W rezultacie, jeśli używasz tylko jednego połączenia, nie zobaczysz wiele (jeśli w ogóle) korzyści dla wielu rdzeni - potrzebujesz równoległych żądań, aby wykorzystać wiele rdzeni.
voretaq7
2

Inni wyjaśnili, że procesor logiczny ogólnie odnosi się do rdzenia procesora, ale chcę skomentować stwierdzenie, że nie ma znaczenia, w jaki sposób rdzenie są rozmieszczone na procesorach.

Na kości procesora mogą znajdować się pamięci podręczne, które są współużytkowane przez rdzenie lub są dedykowane pojedynczym lub podgrupom rdzeni. Na przykład jedna wspólna konfiguracja to dedykowana pamięć podręczna L1 i wspólna pamięć podręczna L2. W tym przypadku skalowalność pojedynczego dwurdzeniowego procesora może różnić się od dwóch jednordzeniowych procesorów.

Skalowalność wpływa na pamięć główną, a maszyny NUMA wykazują inne zachowanie niż inne niż NUMA.

Zwracam na to uwagę tylko dlatego, że OP omawia pytania dotyczące skalowalności, których odpowiedzi są na ogół bardziej szczegółowe niż „program X może używać rdzeni procesora Y”.

Tim B.
źródło
1

W tym przypadku mają na myśli wiele procesorów z mniejszą liczbą rdzeni ... Część rozmowy jest przygotowana na przyszłość. Niektóre mówią marketingowo.

ewwhite
źródło