La ce punct o baza de date MySQL începe să-și piardă performanță?
Am ceea ce eu cred a fi o bază de date mare, cu aproximativ 15 milioane de înregistrări, care ocupă aproape 2GB. Pe baza acestor numere, există niciun stimulent pentru mine pentru a curăța de date, sau sunt în siguranță pentru a permite să continue scalare pentru câțiva ani mai mult?
Fizice dimensiunea bazei de date nu't contează. Numărul de înregistrări don't contează.
Din experienta mea cea mai mare problemă care aveți de gând să ruleze în a nu este dimensiunea, dar numărul de interogări pe care le pot ocupa la un moment dat. Cel mai probabil, aveți de gând să aibă de a trece la un master/slave de configurare, astfel încât citit interogări poate rula împotriva sclavilor și scrie interogări rula împotriva stăpânului. Cu toate acestea, dacă nu sunt gata pentru asta încă, puteți tweak indici pentru interogări se execută pentru a accelera timpul de răspuns. De asemenea, există o mulțime de tweaking puteți face pentru a stiva de rețea și kernel in Linux, care vă va ajuta.
Am avut de-a mea ajunge până la 10GB, cu doar un număr moderat de conexiuni și manipulate de cereri de bine.
Eu m-aș concentra în primul rând pe indici, atunci am un server admin uita-te la sistemul de OPERARE, și dacă toate astea nu - 't ajuta ar fi timpul să pună în aplicare un master/slave de configurare.
În general, acest lucru este un foarte subtil problemă și nu banal, de niciun fel. Am să vă încurajez să citiți mysqlperformanceblog.com și de Înaltă Performanță MySQL. Eu chiar cred că nu există nici un răspuns general pentru acest lucru.
Am'm lucrează la un proiect care are o baza de date MySQL cu aproape 1 tb de date. Cel mai important scalabilitate factor este memoria RAM. În cazul în care indicii de mese se încadrează în memorie și întrebările dumneavoastră sunt extrem de optimizat, puteți servi o cantitate rezonabilă de solicitări, cu o medie de mașină.
Numărul de înregistrări contează, în funcție de cât de mese arata ca. L's o diferenta de a avea o mulțime de varchar domenii sau doar o pereche de int sau tânjește.
Dimensiunea fizică a bazei de date aspecte precum: cred că de backup, de exemplu. În funcție de motor, fizice db fișierele de pe creste, dar nu't psihiatru, de exemplu cu innodb. Deci ștergerea multe rânduri, nu't ajuta pentru a micsora fișiere fizice.
Nu's o mulțime acestei probleme și, ca într-o mulțime de cazuri, diavolul este în detalii.
Dimensiunea bazei de date contează. Dacă aveți mai mult de un tabel cu mai mult de un milion de înregistrări, apoi performanța începe într-adevăr să se degradeze. Numărul de înregistrări are, desigur, afectează performanța: MySQL poate fi lent, cu mese mari. Dacă te-a lovit de un milion de înregistrări, veți obține performanța probleme în cazul în care indicii nu sunt setate corect (de exemplu, nu există indicii pentru domeniile în "în cazul în CARE declarațiile" sau "PE condiții" în se alătură). Dacă te-a lovit de 10 milioane de înregistrări, veți începe să obțineți probleme de performanță, chiar dacă aveți toate dvs. de indici de dreapta. Upgrade-uri Hardware - adăugarea de mai multă memorie și mai mult puterea procesorului, mai ales de memorie - ajuta de multe ori pentru a reduce cele mai grave probleme prin creșterea performanței, din nou, cel puțin până la un anumit grad. De exemplu, 37 semnale mers la 32 GB RAM la 128GB de RAM pentru Basecamp server de baze de date.
eu m-aș concentra în primul rând pe indici, decât să am un server admin uita-te la sistemul de OPERARE, și dacă toate astea nu - 't de ajutor ar putea fi timpul pentru un master/slave de configurare.
Ca's adevărat. Un alt lucru care funcționează, de obicei, este de a reduce cantitatea de date pe care's a lucrat în mod repetat cu. Dacă aveți "datele vechi" și "date noi" si 99% din întrebările dumneavoastră de lucru cu date noi, doar muta toate datele vechi la o altă masă - și don't se uite la ea ;)
-> Avea o privire de la partiționare.
2GB și la 15M de înregistrări este o foarte mică bază de date - am've rula mult mai mari pe un pentium III(!) și tot ce a mai alerga destul de repede.. Daca al tau este lent, este o bază de date/aplicație problemă de design, nu o mysql unul.
L's fel de inutil să vorbim despre "performanța bazei de date", "interogare performanta" este un termen mai bun aici. Și răspunsul este: depinde de interogare, date care operează pe, indici, hardware, etc. Puteți obține o idee de cât de multe rânduri vor fi scanate și ce indicii sunt de gând pentru a fi utilizate cu EXPLICA de sintaxă.
2GB nu prea conta ca un "mare" bază de date - it's mai mult de o dimensiune medie.
Odată am fost chemat sa se uite la un mysql care a avut "oprit de lucru". Am descoperit că DB fișiere aveau reședința într-o Rețea filer Aparat montat cu NFS2 și cu o dimensiune maximă de 2GB. Și destul de sigur, tabel care a oprit acceptarea tranzacțiilor a fost exact 2GB de pe disc. Dar în ceea ce privește curba de performanta am'm a spus că a fost de lucru ca un campion până când l-am't de lucru la toate! Această experiență servește întotdeauna pentru mine ca un memento că nu're întotdeauna dimensiunile de mai sus și de mai jos de cel natural suspect.
Un punct să ia în considerare este, de asemenea, scopul de sistem și de date de la o zi la alta.
De exemplu, pentru un sistem cu GPS de monitorizare de masini nu este relevant date de interogare de la pozițiile din mașină în lunile precedente.
Prin urmare, datele pot fi transmise la alte tabele istorice pentru o consultare cât și pentru a reduce timpii de execuție de la o zi la alta nelamurire.
Am'm gestionează în prezent o bază de date MySQL de pe Amazon's de infrastructură cloud, care a crescut de la 160 GB. Interogare de performanță este bine. Ceea ce a devenit un coșmar este backup-uri, reface, adăugarea de sclavi, sau orice altceva care se ocupă cu întregul set de date, sau chiar DDL pe mese mari. Obtinerea unui curat importul unui fișier de imagine a devenit problematică. În scopul de a face procesul suficient de stabil pentru a automatiza, diverse opțiuni necesare pentru a fi făcute să acorde prioritate de stabilitate asupra performanței. Dacă am avut vreodată de a recupera de la un dezastru, folosind un SQL backup, am'd fi în jos de zile.
Orizontal scalare SQL este, de asemenea, destul de dureros, și, în cele mai multe cazuri duce la folosind-o în moduri pe care probabil că nu intenționează când ai ales să-ți pui de date în SQL în primul rând. Cioburi, citi sclavi, multi-master, et al, toate sunt de rahat soluții care adauga complexitate la tot ce ți-ai face cu DB, și nici una dintre ele nu rezolvă problema; doar atenuează în unele moduri. Aș sugera cu tărie îndreptăm unele date din MySQL (sau într-adevăr orice SQL), atunci când începe să se apropie de un set de date de dimensiune în cazul în care aceste tipuri de lucruri să devină o problemă.
Performanța poate degrada într-o chestiune de câteva mii de rânduri dacă baza de date nu este conceput în mod corespunzător.
Dacă aveți corespunzătoare indicilor, utilizarea corectă motoare (don't folosi MyISAM în cazul în care mai multe Lmd sunt de așteptat), utilizarea de partiționare, aloca memorie corect în funcție de utilizare și, desigur, au o bună configurare server, MySQL se pot ocupa de date, chiar și în terabytes!
Există întotdeauna modalități de a îmbunătăți performanța bazei de date.
Depinde de interogare și de validare.
De exemplu, am lucrat cu o masă de 100 000 de droguri care are o coloana nume generic în cazul în care acesta are mai mult de 15 caractere pentru fiecare medicament în masă .Am pus-o interogare pentru a compara numele generic de droguri între două tabele.Interogarea durează mai multe minute pentru a rula.La Fel,dacă veți compara droguri folosind indicele de droguri,folosind un id coloana (cum a spus mai sus), este nevoie de doar câteva secunde.
Dimensiunea bazei de date contează în termeni de octeți și masa's numărul de rânduri. Veți observa o mare diferenta de performanta intre o lumină bază de date și o pată de cerneală umplut-o. Odată ce cererea mea s-a blocat pentru că am pus imagini binare în interiorul domenii în loc de menținându-imagini în fișiere pe disc și de a pune numai nume de fișiere în baza de date. Iterarea un număr mare de rânduri pe de altă parte nu este gratuit.