Vă mulțumim pentru susținere

Cât de mare poate obține o bază de date MySQL înainte ca performanța să înceapă să se degradeze

În ce moment o bază de date MySQL începe să piardă performanța?

  • Mărimea bazei de date fizice contează?
  • Nu contează numărul de înregistrări?
  • Este o degradare a performanței liniară sau exponențială?

Am ceea ce cred ca este o baza de date vasta, cu aproximativ 15 milioane de inregistrari care necesita aproape 2GB. Pe baza acestor cifre, există vreun stimulent pentru mine să curăț datele sau sunt în siguranță pentru a le permite să continue să scaldească încă câțiva ani?

0
adăugat editat

13 răspunsuri

Dimensiunea fizică a bazei de date nu contează. Numărul de înregistrări nu contează.

Din experiența mea, cea mai mare problemă la care te vei întâlni nu este mărimea, ci numărul de interogări pe care le poți rezolva la un moment dat. Cel mai probabil, va trebui să vă deplasați la o configurație master / slave, astfel încât interogările citite să poată rula împotriva sclavilor, iar interogările de scriere să fie difuzate împotriva comandantului. Cu toate acestea, dacă nu sunteți încă pregătit pentru acest lucru, puteți oricând să vă ajustați indexurile pentru interogările pe care le executați pentru a accelera timpul de răspuns. De asemenea, există multe modificări pe care le puteți face la stack-ul de rețea și la kernelul din Linux, care vă vor ajuta.

Am avut a mea a ajunge până la 10GB, cu doar un număr moderat de conexiuni și a gestionat cererile foarte bine.

M-aș concentra mai întâi pe indexurile dvs., apoi am avea un server de administrare a serverului să vă uitați la sistemul dvs. de operare și dacă tot ce nu-l ajută ar putea fi timpul să implementați o configurație master / slave.

0
adăugat
Ce zici dacă dimensiunea bazei de date este mai mare de 7 GB. În acest sens, termenul nu se efectuează?
adăugat autor Hacker

De asemenea, aveți grijă de conexiunile complexe. Complexitatea tranzacțiilor poate fi un factor major în plus față de volumul tranzacțiilor.

Întrebările grele de reacție, uneori, oferă un mare impuls de performanță.

0
adăugat

Este inutil să vorbim despre "performanța bazei de date", "performanța interogării" este un termen mai bun aici. Răspunsul este că depinde de interogare, de datele pe care operează, de indici, de hardware etc. Puteți obține o idee despre câte rânduri vor fi scanate și ce indici vor fi utilizați cu sintaxa EXPLAIN.

2GB nu contează ca o bază de date "mare" - este mai mult de o mărime medie.

0
adăugat

M-aș focaliza mai întâi pe indexurile tale, decât pe administrarea serverului să te uiți la sistemul tău de operare și dacă tot ce nu-l ajută ar putea fi timp pentru o configurație master / slave.

Este adevărat. Un alt lucru care funcționează de obicei este acela de a reduce cantitatea de date cu care a lucrat în mod repetat. Dacă aveți "date vechi" și "date noi" și 99% din interogările dvs. lucrează cu date noi, trebuie doar să mutați toate datele vechi într-o altă tabelă - și nu vă uitați la aceasta;)

-> Have a look at partitioning.

0
adăugat

În general, aceasta este o problemă foarte subtilă și nu deloc trivială. Vă încurajez să citiți mysqlperformanceblog.com și MySQL de înaltă performanță . Chiar cred că nu există un răspuns general pentru acest lucru.

Lucrez la un proiect care are o bază de date MySQL cu aproape 1TB de date. Cel mai important factor de scalabilitate este RAM. Dacă indicele tabelelor dvs. se potrivesc în memorie și interogările dvs. sunt foarte optimizate, puteți servi o cantitate rezonabilă de cereri cu o mașină medie.

Numărul de înregistrări contează, în funcție de modul în care arată tabelele dvs. Este o diferență de a avea o mulțime de câmpuri varchar sau doar câteva perechi de ints sau longs.

Dimensiunea fizică a bazei de date este de asemenea importantă: gândiți-vă de backup-uri, de exemplu. În funcție de motorul dvs., fișierele dvs. fizice db cresc, dar nu micsorați, de exemplu, cu innodb. Deci, ștergerea unei mulțimi de rânduri nu ajută la micșorarea fișierelor fizice.

Sunt multe probleme și, în multe cazuri, diavolul se află în detaliu.

0
adăugat

Dimensiunea bazei de date contează . Dacă aveți mai mult de un tabel cu mai mult de un milion de înregistrări, performanța începe într-adevăr să se degradeze. Numărul de înregistrări afectează, desigur, performanța: MySQL poate fi lent cu mese mari . Dacă ați lovit un milion de înregistrări, veți obține probleme de performanță dacă indicii nu sunt setați corect (de exemplu, nu există indici pentru câmpurile din "Declarații WHERE" sau "Condiții ON" în join). Dacă ați lovit 10 milioane de înregistrări, veți începe să obțineți probleme de performanță chiar dacă aveți toate indicii potriviți. Îmbunătățirile hardware - adăugând mai multă memorie și mai multă putere procesorului, mai ales memoria - contribuie deseori la reducerea celor mai grave probleme prin creșterea din nou a performanței, cel puțin într-o anumită măsură. De exemplu, 37 de semnale au variat de la 32 GB RAM la 128 GB de RAM pentru serverul bază de date Basecamp.

0
adăugat

Un punct de luat în considerare este și scopul sistemului și al datelor din zi în zi.

De exemplu, pentru un sistem cu monitorizare GPS a autovehiculelor nu sunt date de interogare relevante din pozițiile mașinii în lunile anterioare.

Prin urmare, datele pot fi transmise altor tabele istorice pentru o posibilă consultare și pot fi reduse orele de execuție ale interogărilor de zi cu zi.

0
adăugat

Odată am fost chemat să văd un mysql care "nu mai funcționa". Am descoperit că fișierele DB se aflau pe o rețea File Appliance instalată cu NFS2 și o dimensiune maximă a fișierelor de 2 GB. Și destul de sigur, masa care a încetat să accepte tranzacții era de 2 GB pe disc. Dar în ceea ce privește curba de performanță mi se spune că funcționează ca un campion până când nu funcționează deloc! Această experiență serveste întotdeauna pentru mine ca un memento frumos că există mereu dimensiuni deasupra și sub cea pe care o suspectați în mod firesc.

0
adăugat
în timp ce este adevărat că problema scalării este cel mai bine văzută holistic, dar acest lucru nu are nicio legătură cu modul în care MySQL se califică.
adăugat autor Lie Ryan

2GB și aproximativ 15M înregistrări este o bază de date foarte mică - am executat mult mai mari pe un pentium III (!) Și totul a funcționat încă destul de repede .. Dacă este lentă este o problemă de proiectare baze de date / aplicații, nu mysql unu.

0
adăugat

Performanța se poate degrada într-o chestiune de câteva mii de rânduri dacă baza de date nu este proiectată corect.

Dacă aveți indicii adecvați, utilizați motoare adecvate (nu utilizați MyISAM unde sunt așteptate mai multe LMD-uri), utilizați partiționarea, alocați memoria corectă în funcție de utilizare și bineînțeles aveți o configurație bună a serverului, MySQL poate gestiona datele chiar și în terabytes!

Există întotdeauna modalități de îmbunătățire a performanței bazei de date.

0
adăugat

It depends on your query and validation.

De exemplu, am lucrat cu o masă de 100 000 de medicamente care are un nume generic de coloană în cazul în care acesta are mai mult de 15 de caractere pentru fiecare medicament în tabelul .I a pus o interogare pentru a compara numele generic de droguri intre doua interogare tables.The ia mai multe minute pentru a run.The la fel, dacă veți compara drogurile utilizând indexul de droguri, folosind o coloană id (așa cum a spus mai sus), durează doar câteva secunde.

0
adăugat

Dimensiunea bazei nu contează în termeni de octeți și numărul de rânduri din tabel. Veți observa o diferență uriașă de performanță între o bază de date ușoară și una plină. Odată ce cererea mea a fost blocată deoarece am pus imagini binare în câmpuri în loc să păstrez imagini în fișiere de pe disc și să pun doar nume de fișiere în baza de date. Iterarea unui număr mare de rânduri pe de altă parte nu este gratuită.

0
adăugat

În prezent gestionez o bază de date MySQL pe infrastructura cloud Amazon, care a crescut la 160 GB. Performanța interogării este în regulă. Ceea ce a devenit un coșmar este copierea de rezervă, restabilirea, adăugarea de sclavi sau orice altceva care se ocupă de întregul set de date sau chiar de DDL pe mesele mari. Obținerea unei importări curate a unui fișier dump a devenit problematică. Pentru ca procesul să fie suficient de stabil pentru a se automatiza, trebuie luate diverse opțiuni pentru a acorda prioritate stabilității față de performanță. Dacă ar fi trebuit să ne redresăm dintr-un dezastru folosind o copie de rezervă SQL, ne-ar fi lăsat zile zile.

Scalarea SQL pe scară orizontală este, de asemenea, destul de dureroasă și, în cele mai multe cazuri, duce la utilizarea acesteia în moduri pe care probabil nu ați intenționat atunci când ați ales să puneți datele în SQL în primul rând. Cioburi, citiți sclavi, multi-master, et al, acestea sunt soluții într-adevăr toate nasoale care se adaugă complexitate la tot ceea ce faci vreodată cu DB, și nu una dintre ele rezolvă problema; îl diminuează doar în anumite privințe. Aș sugera puternic uita la mutarea unora dintre datele 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 devin o problemă.

0
adăugat