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.
Odpowiedzi:
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ę:
Dokonaj najlepszego oszacowania, ile miejsca na dysku będziesz potrzebować przez następne 3-5 lat, a następnie dwukrotnie.
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 MEANINGLESS
rozważ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.).
źródło
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.
źródło