Jak przeprowadzasz testy obciążenia i planowanie pojemności baz danych?

34

To kanoniczne pytanie o planowanie pojemności baz danych.

Związane z:

Chcę stworzyć kanoniczne pytanie dotyczące narzędzi i metod planowania pojemności baz danych. To ma być pytanie kanoniczne.

Oczywiście ogólny przepływ pracy to:

  • Umieść swój scenariusz na miejscu
  • Dodaj monitorowanie
  • Dodaj ruch
  • Oceń wyniki
  • Rozwiązanie w oparciu o wyniki
  • Spłucz, powtarzaj, aż będzie wystarczająco szczęśliwy

Proszę opisać różne narzędzia i techniki dla różnych serwerów, frameworków itp., A także najlepsze praktyki.

gWaldo
źródło
Baza danych prawie nigdy nie jest samodzielnym systemem. Widać to w głównym kontekście, często dużych, serwerów aplikacji przed nimi. DB są urządzeniami danych zaplecza. Dlatego podczas testowania obciążenia należy wziąć to pod uwagę.
Nils,

Odpowiedzi:

24

Planowanie pojemności dysku i pamięci RAM

Planowanie pojemności dysku i pamięci dla serwera bazy danych jest czarną sztuką. Wiecej znaczy lepiej. Im szybciej, tym lepiej.

Jako ogólne wytyczne oferuję:

  • Chcesz więcej miejsca na dysku niż kiedykolwiek będziesz potrzebować.
    Dokonaj najlepszego oszacowania, ile miejsca na dysku będziesz potrzebować przez następne 3-5 lat, a następnie dwukrotnie.
  • Będziesz potrzebować wystarczającej ilości pamięci RAM, aby utrzymać indeksy bazy danych w pamięci, obsłużyć największe zapytanie co najmniej dwa razy, a nadal mieć wystarczająco dużo miejsca na zdrową pamięć podręczną dysku systemu operacyjnego.
    Rozmiar indeksu zależy od bazy danych, a wszystko inne zależy w dużym stopniu od zestawu danych i struktury zapytań / bazy danych. Jako propozycję podam „Co najmniej 2x rozmiar największego stołu”, ale zauważ, że ta sugestia dotyczy naprawdę dużych operacji hurtowni danych, w których największy stół może mieć kilkadziesiąt lub setki gigabajtów.

Każdy dostawca bazy danych ma instrukcje dotyczące dostrajania wydajności jądra dysku / pamięci / systemu operacyjnego - Przed wdrożeniem poświęć trochę czasu na skorzystanie z tej dokumentacji. To pomoże.


Benchmarking obciążenia i planowanie wydajności

Zakładając, że jeszcze nie wdrożyłeś ...

Wiele systemów baz danych jest dostarczanych z narzędziami Benchmarking - na przykład PostgreSQL jest dostarczany z pgBench .
Narzędzia te powinny być Twoim pierwszym przystankiem w testowaniu wydajności baz danych. Jeśli to możliwe, powinieneś je uruchomić na wszystkich nowych serwerach baz danych, aby poczuć „ile pracy” może wykonać serwer bazy danych.

Uzbrojony teraz w surowy test porównawczy, który ABSOLUTELY MEANINGLESSrozważymy bardziej realistyczne podejście do testu porównawczego: Załaduj schemat bazy danych i napisz program, który zapełni go danymi zastępczymi, a następnie uruchom zapytania aplikacji względem tych danych.
Ten test porównuje trzy ważne rzeczy: 1. Serwer bazy danych (sprzęt) 2. Serwer bazy danych (oprogramowanie) 3. Projekt bazy danych i jej interakcja z (1) i (2) powyżej.

Zauważ, że wymaga to dużo więcej wysiłku niż proste, wstępnie skompilowane testy porównawcze, takie jak pgBench: Musisz napisać kod, aby wypełnić dane, i może być konieczne napisanie kodu, aby wykonać zapytania i czas wykonania raportu.
Ten rodzaj testowania jest również znacznie bardziej dokładny: ponieważ pracujesz nad schematem i zapytaniami, możesz zobaczyć, jak będą one działać, i oferuje możliwość profilowania i ulepszania bazy danych / zapytań.

Wyniki tych testów porównawczych są wyidealizowanym widokiem Twojej bazy danych. Dla bezpieczeństwa załóż, że osiągniesz tylko 50-70% tej wydajności w środowisku produkcyjnym (reszta to poduszka, która pozwoli ci poradzić sobie z nieoczekiwanym wzrostem, awariami sprzętu, zmianami obciążenia itp.).


Jest za późno! Jest w produkcji!

Gdy Twoje systemy są już w produkcji, jest naprawdę za późno na „testowanie” - możesz na krótko włączyć rejestrowanie / synchronizację zapytań i zobaczyć, jak długo trwa wykonanie, i możesz uruchomić zapytania „testu warunków skrajnych” dla dużych zestawów danych podczas wyłączenia godziny. Możesz także spojrzeć na wykorzystanie procesora, pamięci RAM i we / wy (przepustowość dysku), aby dowiedzieć się, jak bardzo jest obciążony.
Niestety, wszystkie te rzeczy pozwolą ci zorientować się, co robi system i niejasne pojęcie, jak blisko jest nasycenia.
To prowadzi nas do…


Monitorowanie na żywo

Wszystkie testy porównawcze na świecie nie pomogą ci, jeśli twój system nagle zobaczy nowe / różne wzorce użytkowania.
W przypadku lepszych lub gorszych wdrożeń baz danych nie ma charakteru statycznego: Twoi programiści będą zmieniać rzeczy, twój zestaw danych będzie się powiększał (nigdy nie wydaje się, że się kurczy), a twoi użytkownicy w jakiś sposób utworzą szalone kombinacje zdarzeń, których nigdy nie przewidywałeś podczas testowania.

Aby właściwie zaplanować pojemność bazy danych, będziesz musiał wdrożyć monitorowanie wydajności, aby ostrzec Cię, gdy wydajność bazy danych nie spełnia już Twoich oczekiwań. W tym momencie możesz rozważyć działania naprawcze (nowy sprzęt, zmiany schematu DB lub zmiany zapytań w celu zoptymalizowania wykorzystania zasobów itp.).


Uwaga: Jest to bardzo ogólny i ogólny przewodnik na temat doboru sprzętu bazy danych i ustalania, ile może to znosić. Jeśli nadal nie masz pewności, jak ustalić, czy określony system spełnia Twoje potrzeby, powinieneś porozmawiać z ekspertem ds. Baz danych.
Istnieje również witryna Stack Exchange poświęcona w szczególności zarządzaniu bazami danych: dba.stackexchange.com . Przeszukaj ich archiwum pytań lub przejrzyj tagi właściwe dla silnika bazy danych, aby uzyskać dodatkowe porady na temat dostrajania wydajności.

voretaq7
źródło
1
Ponadto w dzisiejszych czasach można używać dysków SSD do operacji wymiany / operacji na dysku. Przyspieszy to zapytania wykorzystujące duże tabele tymczasowe na dyskach. Tak więc dodanie większej liczby dysków SSD jest ogólnie bardzo dobrym pomysłem.
Peter
2
@Peter Nie polecałbym dysków SSD do wymiany przestrzeni (jeśli aktywnie zamieniasz, jest bardzo wysoki wskaźnik rezygnacji), chociaż przy wystarczająco dużym dysku SSD i dobrym wyrównaniu zużycia dysk może wytrzymać żywotność maszyny. Widziałem dyski SSD używane w obszarze tabel temp z dobrymi wynikami.
voretaq7
1
Pamiętaj, że ta rada w komentarzach na temat dysków SSD ma już 7 lat. Każda pamięć przechowująca bazę danych na serwerze bazy danych powinna być dyskiem SSD w 2019 r. Lub później.
Mark Henderson
1

Zasadniczo potrzebujesz realistycznych przypadków użycia do przetestowania wydajności. Najlepszą praktyką jest zaangażowanie twórców aplikacji i użytkowników końcowych.

Zapisz, co zwykle robią, sparametryzuj (zawartość, liczba jednoczesnych działań) dla każdego przypadku użycia.

Następnie zbuduj stronę klienta. Pojedyncza fizyczna maszyna często nie wystarcza do zwiększenia obciążenia produkcyjnego.

Następnie uruchom go, oceń, ulepsz i przetestuj ponownie.

Będziesz zaskoczony, gdy narastają wąskie gardła.

Nils
źródło