Jak duża może być baza danych MySQL zanim zacznie spadać wydajność

W którym momencie baza danych MySQL zaczyna tracić wydajność?

    Czy wielkość fizycznej bazy danych ma znaczenie? Czy liczba rekordów ma znaczenie?
  • czy degradacja wydajności jest liniowa czy wykładnicza?

Mam coś, co uważam za dużą bazę danych, z około 15m rekordów, które zajmują prawie 2GB. Opierając się na tych liczbach, czy jest jakaś zachęta dla mnie, aby wyczyścić dane, Czy mogę bezpiecznie pozwolić mu kontynuować skalowanie przez kilka kolejnych lat?

Author: davejal, 2008-08-04

13 answers

Fizyczny rozmiar bazy danych nie ma znaczenia. Liczba rekordów nie ma znaczenia.

Z mojego doświadczenia wynika, że największym problemem, do którego będziesz się zbliżał, nie jest rozmiar, ale liczba zapytań, które możesz obsłużyć na raz. Najprawdopodobniej będziesz musiał przejść do konfiguracji master / slave, aby zapytania do odczytu mogły działać przeciwko niewolnikom, a zapytania do zapisu przeciwko wzorcowi. Jeśli jednak nie jesteś jeszcze na to gotowy, zawsze możesz dostosować indeksy do zapytań biegasz, aby przyspieszyć czas reakcji. Ponadto istnieje wiele poprawek, które możesz zrobić w stosie sieciowym i jądrze w Linuksie, które pomogą.

Miałem mój dostać się do 10GB, z tylko umiarkowaną liczbę połączeń i obsługiwał żądania po prostu dobrze.

Skupiłbym się najpierw na Twoich indeksach, a następnie niech administrator serwera spojrzy na Twój system operacyjny, a jeśli to wszystko nie pomoże, może nadszedł czas, aby zaimplementować konfigurację master / slave.

 176
Author: Nick Berardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-31 17:55:32

Ogólnie rzecz biorąc jest to kwestia bardzo subtelna i wcale nie trywialna. Zachęcam do lektury mysqlperformanceblog.com i Wysokiej Wydajności MySQL. Naprawdę myślę, że nie ma na to ogólnej odpowiedzi.

Pracuję nad projektem, który ma bazę danych MySQL z prawie 1TB danych. Najważniejszym czynnikiem skalowalności jest PAMIĘĆ RAM. Jeśli indeksy tabel pasują do pamięci, a zapytania są wysoce zoptymalizowane, możesz obsłużyć rozsądną liczbę zapytań za pomocą Przeciętna maszyna.

Liczba rekordów ma znaczenie, w zależności od tego, jak wyglądają tabele. Różnica polega na tym, że jest dużo pól varchar lub tylko kilka int lub Long.

Wielkość fizyczna bazy danych również ma znaczenie: pomyśl na przykład o kopiach zapasowych. W zależności od silnika, fizyczne pliki db rosną, ale nie kurczą się, na przykład z innodb. Więc usunięcie wielu wierszy nie pomaga zmniejszyć fizycznych plików.

Jest wiele w tej kwestii i jak w wielu przypadkach diabeł tkwi w szczegółach.

 74
Author: dlinsin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-12 04:23:30

Rozmiar bazy danych ma znaczenie . Jeśli masz więcej niż jedną tabelę z ponad milionem rekordów, wydajność zaczyna rzeczywiście spadać. Liczba rekordów ma oczywiście wpływ na wydajność: MySQL może być powolny przy dużych tabelach . Jeśli trafisz milion rekordów, pojawią się problemy z wydajnością, jeśli indeksy nie są ustawione poprawnie(na przykład brak indeksów dla pól w" where statements "lub" ON conditions " w połączeniach). Jeśli trafisz 10 milionów płyt, zaczniesz uzyskaj problemy z wydajnością, nawet jeśli masz wszystkie swoje indeksy w porządku. Ulepszenia sprzętu-dodanie większej ilości pamięci i większej mocy procesora, zwłaszcza pamięci-często pomagają zmniejszyć najpoważniejsze problemy poprzez ponowne zwiększenie wydajności, przynajmniej do pewnego stopnia. Na przykład 37 sygnałów przeszło z 32 GB PAMIĘCI RAM do 128 GB PAMIĘCI RAM dla serwera bazy danych Basecamp.

 36
Author: 0x4a6f4672,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-25 13:55:43

Skupiłbym się najpierw na Twoich indeksach, niż na adminie serwera, który spojrzy na Twój system operacyjny, a jeśli to wszystko nie pomoże, może to być czas na konfigurację master / slave.

To prawda. Inną rzeczą, która zwykle działa, jest po prostu zmniejszenie ilości danych, z którymi wielokrotnie pracował. Jeśli masz "stare dane" i "nowe dane", a 99% zapytań działa z nowymi danymi, po prostu przenieś wszystkie stare dane do innej tabeli-i nie patrz na nią ;)

- > Zobacz partycjonowanie .

 22
Author: BlaM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-15 14:34:05

2GB i ok. 15m rekordów to bardzo mała baza danych - na pentium III uruchomiłem dużo większe (!) i wszystko nadal działa dość szybko.. Jeśli twój jest powolny, jest to problem z projektowaniem bazy danych/aplikacji, a nie mysql.

 19
Author: ian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-05 09:03:48

Nie ma sensu mówić o "wydajności bazy danych", "wydajność zapytań" jest tutaj lepszym terminem. A odpowiedź brzmi: to zależy od zapytania, danych, na których działa, indeksów, sprzętu itp. Możesz zorientować się, ile wierszy będzie skanowanych i jakie indeksy będą używane w składni EXPLAIN.

2GB tak naprawdę nie liczy się jako "duża" baza danych - jest raczej średniej wielkości.

 17
Author: deadprogrammer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 19:53:54

Uważaj również na złożone połączenia. Złożoność transakcji może być dużym czynnikiem oprócz wielkości transakcji.

Refaktoryzacja ciężkich zapytań czasami oferuje duży wzrost wydajności.

 9
Author: saint_groceon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-04 19:01:23

Kiedyś zostałem wezwany do spojrzenia na mysql, który "przestał działać". Odkryłem, że pliki DB znajdują się na urządzeniu sieciowym filer zamontowanym z NFS2 i o maksymalnym rozmiarze pliku 2GB. I oczywiście tabela, która przestała akceptować transakcje była dokładnie 2GB na dysku. Ale jeśli chodzi o krzywą wydajności, powiedziano mi, że działało jak mistrz, aż w ogóle nie działało! To doświadczenie zawsze służy mi jako miłe przypomnienie, że są zawsze wymiary powyżej i poniżej tego, co naturalnie podejrzewasz.

 9
Author: jj33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 04:27:52

Punktem do rozważenia jest również cel systemu i dane na co dzień.

Na przykład, dla systemu z monitoringiem GPS Samochodów nie jest istotne zapytanie danych z pozycji samochodu w poprzednich miesiącach.

W związku z tym dane mogą być przekazywane do innych tabel historycznych w celu ewentualnej konsultacji i skrócić czas wykonywania codziennych zapytań.

 9
Author: alditis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-06 05:13:30

Obecnie zarządzam bazą danych MySQL na infrastrukturze chmurowej Amazon, która wzrosła do 160 GB. Wydajność zapytań jest dobra. To, co stało się koszmarem, to tworzenie kopii zapasowych, przywracanie, dodawanie niewolników lub cokolwiek innego, co dotyczy całego zbioru danych, a nawet DDL na dużych tabelach. Uzyskanie czystego importu pliku zrzutu stało się problematyczne. Aby proces był wystarczająco stabilny, aby zautomatyzować, konieczne było dokonanie różnych wyborów, aby nadać priorytet stabilności nad wydajnością. Jeśli kiedykolwiek będziemy musieli odzyskanie po awarii przy użyciu kopii zapasowej SQL, będziemy w dół na kilka dni.

Poziome skalowanie SQL jest również dość bolesne i w większości przypadków prowadzi do używania go w sposób, w jaki prawdopodobnie nie zamierzałeś, gdy zdecydowałeś się umieścić swoje dane w SQL w pierwszej kolejności. Shards, read slaves, multi-master, et al, wszystkie są naprawdę gównianymi rozwiązaniami, które dodają złożoności wszystkim, co kiedykolwiek robisz z DB, i żaden z nich nie rozwiązuje problemu; tylko łagodzi go w jakiś sposób. Zdecydowanie polecam patrząc na przenoszenie niektórych danych z MySQL (lub naprawdę dowolnego SQL), gdy zaczynasz zbliżać się do zbioru danych o rozmiarze, w którym tego typu rzeczy stają się problemem.

 6
Author: Rich Remer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 16:32:58

Wydajność może ulec pogorszeniu w ciągu kilku tysięcy wierszy, jeśli baza danych nie jest prawidłowo zaprojektowana.

Jeśli masz odpowiednie indeksy, używaj odpowiednich silników (nie używaj MyISAM gdzie oczekuje się wielu DML), używaj partycjonowania, przydzielaj poprawną pamięć w zależności od zastosowania i oczywiście masz dobrą konfigurację serwera, MySQL może obsłużyć dane nawet w terabajtach!

Zawsze są sposoby na poprawę wydajności bazy danych.

 4
Author: Abhijit Buchake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-19 11:26:31

To zależy od Twojego zapytania i walidacji.

Na przykład pracowałem z tabelą 100 000 leków, która ma nazwę rodzajową kolumny, gdzie ma więcej niż 15 znaków dla każdego leku w tej tabeli .Umieściłem zapytanie, aby porównać ogólną nazwę leków między dwoma tabelami.Uruchomienie zapytania zajmuje więcej minut.To samo, jeśli porównasz leki za pomocą indeksu narkotyków, używając kolumny id (jak wspomniano powyżej), zajmuje to tylko kilka sekund.

 3
Author: Anands23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-03 11:55:19

Rozmiar bazy danych ma znaczenie pod względem bajtów i liczby wierszy tabeli. Zauważysz ogromną różnicę wydajności między lekką bazą danych a wypełnioną blobem. Kiedyś moja aplikacja utknęła, ponieważ umieszczam binarne obrazy w polach zamiast przechowywać obrazy w plikach na dysku i umieszczać tylko nazwy plików w bazie danych. Iteracja dużej liczby wierszy z drugiej strony nie jest za darmo.

 2
Author: Viktor Joras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 10:27:47