Ile wyborów na sekundę może uruchomić serwer mysql?

19

Piszę biznesplan i muszę zasymulować koszt, kiedy moja witryna będzie dostępna dla 500 000 unikalnych użytkowników.

  • odwiedzający: 500 000
  • liczba odsłon strony: 1 500 000
  • liczba odsłon strony pająka: 500 000
  • łączna liczba wyświetleń strony: 2 000 000

Każda strona wykonuje 50 zapytań + -

  • zapytania dziennie: 100 milionów
  • na godzinę: 4 miliony
  • na minutę: 70 000
  • na sekundę: 1200
  • szczyt: 3000

Do tego obliczenia potrzebuję 3000 zapytań sekund ... jaki serwer może to obsłużyć?

Problem polega na tym, że moja strona robi 2000 wizyt dziennie i - + 150/200 zapytań na sekundę ... od tego momentu oczekuję 50 000 zapytań na sekundę.

Ile serwerów potrzebnych w klastrze lub replikacji zarządza tym zadaniem?

Przywróć Monikę
źródło
5
Jakiego rodzaju witrynę odwiedza 8k +?
Ignacio Vazquez-Abrams
5
Potrzebujesz natychmiastowej oceny projektu systemu.
Chopper3
1
Nigdzie nie ma wystarczającej ilości informacji, ponieważ nie powiedziałeś nam nic o tym, co naprawdę ważne - same zapytania. Nie musisz nam też mówić o maszynie, którą prowadzisz. Czy to 486? Najnowszy i największy superkomputer czy coś pomiędzy? Wszystkie wymienione liczby nie mają znaczenia dla pytania. Podaj WŁAŚCIWE informacje.
John Gardeniers,
> Jakiego rodzaju witrynę odwiedza 8k +? Otrzymuję 2000 unikalnych użytkowników, ale każdy z nich otwiera wiele stron + mam w środku wiele pająków. 2000 unikalnych użytkowników generuje 6000 unikalnych Ips, otwierając codziennie ponad 120 000 stron. dzięki

Odpowiedzi:

22

Pracowałem kiedyś dla firmy zajmującej się handlem elektronicznym, której strona internetowa miała kilka milionów odsłon dziennie. Mieliśmy jeden DELL PE 1750 z 2 jednordzeniowymi procesorami i 2 GB pamięci RAM, wielkość bazy danych ok. 4 GB. W godzinach szczytu serwer ten obsługiwał do 50 000 zapytań na sekundę.

Powiedziawszy to: baza danych była dobrze skonstruowana, wszystkie zapytania zostały precyzyjnie dostrojone (mieliśmy cotygodniowe sesje analizujące dzienniki wolnych zapytań oraz naprawiające zapytania i indeksy), a także konfiguracja serwera. Buforowanie jest zdecydowanie dobrym pomysłem, ale MySQL tak robi, po prostu musisz przeanalizować wydajność, a następnie dostroić sposób użycia pamięci (pamięć podręczna zapytań w porównaniu z innymi opcjami).

Z tego doświadczenia mogę powiedzieć, że największy wpływ mają brakujące indeksy, złe indeksy i zły projekt bazy danych (np. Długie pola łańcuchowe jako klucze podstawowe i podobne bzdury).

wolfgangsz
źródło
8

Wszystko zależy od złożoności zapytania, ilości pamięci serwerów i szybkości dysków.

Jeśli zapytania są bardzo proste lub bardzo dobrze dostrojone, wystarczy jeden duży serwer bazy danych. Jeśli jednak zapytania są bardzo złożone (lub proste, ale źle dostrojone), będziesz potrzebować kilku serwerów.

mrdenny
źródło
Albo jakieś poważne zmiany schematu i ponowne indeksowanie ...
Massimo
3
Strojenie jest ZAWSZE lepsze niż dodawanie większej ilości sprzętu. Dodanie większej ilości sprzętu tylko maskuje problem, dopóki problem jest trudniejszy do rozwiązania.
mrdenny
Dzięki za odpowiedź, więc myślę, że 2 serwery równolegle + 1 pasywny dla redundancji powinny być w porządku, prawda? Mówię o 2x serwerach czterordzeniowych z 32 g pamięci RAM i szybkimi dyskami. czy mam rację? pamiętaj, że potrzebuję występów!
1
wszystko jest dobrze dostrojone i zindeksowane, mam 1 lub 2 wolne zapytania na tydzień (a wolny czas zapytania to tylko 2 sekundy) i tak piszę biznesplan, i chciałbym wiedzieć, jaką pulę serwerów może zarządzać 12 000 000 stron otwieranych codziennie, generując 8000 zapytań na sekundę
8000 zapytań na sekundę to nie wszystko. Pojedynczy 16-rdzeniowy serwer prawdopodobnie załatwi sprawę. 64 gigabajty pamięci RAM (lub mniej lub więcej, w zależności od tego, jak duża jest baza danych i ile danych musi być jednocześnie przechowywanych w pamięci podręcznej) powinno załatwić sprawę. Moja baza danych (przyznana jej wersja SQL Server) to 1 TB na 16-rdzeniowym 64-gigabajtowym serwerze RAM z 40-50 tys. Użytkowników, którzy uderzają go codziennie do kilku razy na minutę (każdego) przez cały dzień.
mrdenny
3

Tak naprawdę nie można tego oszacować, nie wiedząc nic na temat konkretnych zapytań, schematu bazy danych i jego wielkości.

Prosty WYBÓR w kolumnie indeksowanej jest zupełnie inną bestią niż kilka JOIN opartych na nieindeksowanych ... i oczywiście wiele się zmieni, jeśli zaangażowane tabele zawierają rekordy 1K lub 1M.

Również:

  • Jaka jest twoja obecna konfiguracja sprzętu?
  • Ile mocy (procesor, pamięć RAM, dyskowe operacje we / wy) zużywa Twój serwer pod bieżącym obciążeniem?
Massimo
źródło
właściwie mam serwer z 2x czterordzeniowym rdzeniem z 8 GB pamięci RAM. używam pełnego pamięci RAM i 100% procesora (wydaje się, że mogę użyć 800%, patrz tutaj :) procesor: img834.imageshack.us/img834/3483/downloadv.png ram: img442.imageshack.us/i/ download2p.png dysk: img213.imageshack.us/i/download1x.png dzięki
Na podstawie tych wykresów używasz tylko jednego (lub maksymalnie dwóch) rdzeni procesora; więc twoja aplikacja zdecydowanie nie jest związana z procesorem ... lub jest, ale nie jest w stanie skorzystać z wielu procesorów. Ponadto cała ta pamięć używana do „pamięci podręcznej” nie jest nikomu potrzebna , po prostu korzysta z niej system operacyjny, ponieważ „jest tam”.
Massimo,
jak mogę znaleźć informacje na temat używania wszystkich rdzeni procesora? używam lampy ...
Przede wszystkim powinieneś sprawdzić, czy ich nie używasz, ponieważ po prostu ich nie potrzebujesz (= niskie obciążenie), ponieważ twoich operacji nie można odpowiednio zrównoleglać, lub ponieważ MySQL i / lub Apache nie są skonfigurowane do Użyj ich. A ponieważ te dwa programy zwykle są domyślnie wielowątkowe, zajrzałbym do twojego obciążenia serwera i twoich zapytań SQL ...
Massimo
3

Jak zauważył Ignacio, możesz zajrzeć do buforowania. W cms, a może nawet przed stosem. Ponad 50 zapytań dla każdej (każdej!) Strony to naprawdę dużo.

Joris
źródło
tak, to złożona strona internetowa, to społeczność, nie mogę niczego buforować, zmienia się co sekundę. Próbowałem buforować strony, ale szybkość pamięci podręcznej wynosiła prawie 0, ponieważ za każdym razem, gdy buforuję stronę, nie można jej nigdy więcej odczytać ani zmienić przed ponownym otwarciem. dzięki
4
Istnieje bardzo niewiele nieosiągalnych stron; jeśli zmienia się tylko co sekundę, nadal możesz buforować przez całą sekundę, np. 10 odsłon ;-) Czy zastanawiałeś się nie nad całkowitym buforowaniem stron, a raczej blokami lub konkretnymi wartościami itp.? Możesz buforować poza bazą danych, na segmentach pamięci współużytkowanej, systemie plików, memcached. Również zazwyczaj w takiej sytuacji przydatny może być ESI
Joris
0

Sądząc po twoich komentarzach, największym czynnikiem będzie rozmiar twojego zestawu danych lub przynajmniej rozmiar „gorącego” zestawu danych. 3,000qps, a nawet 8000qps na 16-rdzeniowym serwerze nie stanowi żadnego problemu, o ile serwer rzadko musi iść na dysk w celu spełnienia zapytania. Gdy aktywny zestaw danych przekroczy ilość pamięci używanej przez InnoDB do buforowania, wydajność spadnie gwałtownie.

Elliott
źródło
0

W przypadku dużych „gorących” zestawów danych prawdopodobnie warto zainwestować na czas, aby przejść na schemat „dużych zbiorów danych”, właśnie po to są. Na przykład, jeśli masz do pobrania ogromną ilość danych, ale nigdy nie przepisujesz, a jedynie dodajesz nowe dane, spójrz na Apache Hive. Rozejrzyj się, zwykle jest to smak, który można wystarczająco łatwo połączyć z istniejącym kodem, co również zapobiegnie zgadze związanej z brakiem pamięci podręcznej.

BHGalyean
źródło
0

Jest zbyt wiele rzeczy, które mogą wpływać na twoje zapytania na sekundę, proszę nie ufaj moim danym bez testowania siebie. Publikuję tutaj mój wynik testu prędkości, aby pomóc komuś oszacować qps przy użyciu bieżącej bazy danych i maszyny mysql (2018-09). W moim teście rozmiar danych jest mniejszy niż pamięć serwera (co znacznie zmniejsza IO i znacznie poprawia wydajność).

Korzystam z jednego procesora 3,75 GB pamięci, 100 GB SSD, instancji serwera mysql w chmurze gcp i otrzymuję:

  • 1 klient, jeden sql jeden wiersz odczytany: 799 sql / sekundę.
  • 50 klientów, jeden sql jeden wiersz odczytany: 6403 sql / sekundę.
  • 50 klientów, jeden sql jeden wiersz do zapisu: zapisano 4341 wierszy, qps. 4341 sql / sekundę.
  • 1 klient, 30 000 zapisów w wierszu na sql: 92109 zapisanych wierszy / s.
człowiek z brązu
źródło
zapisz wynik testu qps (2018-11) gcp mysql 2cpu 7,5 GB pamięci 150 GB SSD serializacja zapis 10 wątków, 30 000 wierszy zapisu na sql, 7,0566 GB tabeli, długość klucza danych wynosi 45 bajtów, a długość wartości wynosi 9 bajtów, pobierz 154 KB zapisanych wierszy na sekundę, procesor 97,1% pisze qps 1406 / s w konsoli gcp.
brąz mężczyzna