Vra

Op watter punt het 'n MySQL databasis te begin om prestasie te verloor?

  • Maak fisiese databasis grootte saak?
  • Moet aantal rekords saak?
  • Is daar iemand prestasie agteruitgang lineêre of eksponensiële?

Ek het wat ek glo aan 'n groot databasis wees, met min of meer 15M rekords wat neem byna 2 GB. Op grond van hierdie getalle, is daar geen aansporing vir my om die data uit skoon te maak, of is ek veilig is om toelaat dat dit voortgaan skalering vir 'n paar jaar?

Was dit nuttig?

Oplossing

Die fisiese databasis grootte maak nie saak. Die aantal rekords nie saak nie.

In my ervaring die grootste probleem wat jy gaan om te hardloop in om nie grootte nie, maar die aantal navrae wat jy kan hanteer op 'n slag. Heel waarskynlik jy gaan hê om te skuif na 'n meester / slaaf opset sodat die lees navrae kan hardloop teen die slawe en die skryf navrae uit te voer teen die meester. Maar as jy nog nie gereed is vir hierdie, kan jy altyd aanpas jou indekse vir die navrae wat jy loop om te bespoedig die reaksie tye. Ook is daar 'n klomp van die opstel wat jy kan doen om die netwerk stapel en kern in Linux wat jou sal help.

Ek het my kry tot 10 GB, met slegs 'n matige hoeveelheid verbindings en dit hanteer die versoeke net mooi.

Ek sou eerste fokus op jou indekse, dan 'n bediener admin blik op jou OS, en as alles wat nie help dit dalk tyd wees om 'n meester / slaaf opset te implementeer.

Ander wenke

In die algemeen is hierdie 'n baie subtiele probleem en nie triviaal hoegenaamd nie. Ek wil u aanmoedig om te lees mysqlperformanceblog.com en High Performance MySQL . Ek dink regtig daar is geen algemene antwoord vir hierdie.

Ek is besig met 'n projek wat 'n MySQL databasis met byna 1 TB van data het. Die belangrikste scalability faktor is RAM. As die indekse van jou tafels te pas in die geheue en jou navrae is geoptimaliseerde, kan jy 'n redelike bedrag van versoeke te dien met 'n gemiddelde masjien.

Die aantal rekords nie saak nie, afhangende van hoe jou tafels lyk. Dit is 'n verskil maak aan 'n baie varchar velde of net 'n paar van SY of verlang het.

Die fisiese grootte van die databasis sake sowel: dink rugsteun, byvoorbeeld. Afhangende van jou enjin, jou fisiese db lêers op te groei, maar nie krimp, byvoorbeeld met innodb. So verwydering van 'n baie rye, help nie om jou fisiese lêers krimp.

Daar is 'n baie om hierdie kwessies en as in baie gevalle die duiwel is in die besonderhede.

Die databasis grootte nie saak . As jy meer as een tabel met meer as 'n miljoen rekords, dan prestasie begin inderdaad om verneder. Die aantal rekords nie natuurlik invloed op die prestasie: MySQL kan stadig met groot tafels wees. As jy 'n miljoen rekords getref sal jy prestasie probleme kry as die indekse is nie reg (nie indekse vir velde in "WAAR state" of "VAN DIE toestande" in sluit byvoorbeeld) te stel. As jy 10 miljoen rekords getref, sal jy begin om prestasie probleme selfs al het jy al jou indekse reg te kry. Hardeware opgradering - die toevoeging van meer geheue en meer verwerker krag, veral geheue - dikwels help om die mees ernstige probleme deur die verhoging van die spelpeil te herwin, ten minste tot 'n sekere mate te verminder. Byvoorbeeld 37 seine het van 32 GB RAM om 128GB RAM vir die basiskamp databasis bediener.

  

Ek sou eerste fokus op jou indekse, as 'n bediener admin blik op jou OS, en as alles wat nie help dit dalk tyd vir 'n meester / slaaf opset wees.

Dit is waar. Nog 'n ding wat gewoonlik werk is om net te verminder die hoeveelheid data wat herhaaldelik is gewerk met. As jy "ou data" en "nuwe data" en 99% van jou navrae te werk met nuwe data, net beweeg al die ou data na 'n ander tafel - en nie daarna kyk;)

-> Het jy 'n blik op skeiding

2 GB en sowat 15 m rekords is 'n baie klein databasis - Ek het baie grotes loop op 'n Pentium III en alles het nog loop redelik vinnig .. As jy 'n stadige dit is 'n databasis / program ontwerp probleem, (!) nie 'n mysql een.

Dit is soort van nutteloos om te praat oor "databasis prestasie", "navraag prestasie" is 'n beter term hier. En die antwoord is: dit hang af van die vraag, data wat dit bedryf op, indekse, hardeware, ens Jy kan 'n idee van hoeveel rye gaan geskandeer en wat indekse gaan word met VERDUIDELIK sintaksis kry.

2GB nie regtig tel as 'n "groot" databasis -. Dit is meer van 'n medium grootte

Ook op die uitkyk vir 'n komplekse sluit. Transaksie kompleksiteit kan 'n groot faktor in bykomend tot volume transaksie wees.

refactoring swaar navrae bied soms 'n groot prestasie hupstoot.

Ek was eens 'n beroep op om te kyk na 'n mysql wat moes "opgehou werk". Ek het ontdek dat die DB lêers is woonagtig op 'n netwerk toestel filer gemonteer met NFS2 en met 'n maksimum lêer grootte van 2GB. En seker genoeg, die tafel wat gestop aanvaarding van transaksies was presies 2GB op skyf. Maar met betrekking tot die prestasie kurwe ek meegedeel dat dit besig was soos 'n champ reg tot dit glad nie werk nie! Hierdie ervaring dien altyd vir my as 'n mooi herinnering dat daar is altyd dimensies bo en onder die een wat jy van nature vermoed.

'n punt om te oorweeg is ook die doel van die stelsel en die data in die dag tot dag.

Byvoorbeeld, vir 'n stelsel met GPS monitering van motors is nie relevant navraag data van die posisies van die motor is in die vorige maande.

Daarom die data kan oorgedra word na ander historiese tafels vir moontlike konsultasie en verminder die uitvoering tye van die dag-tot-dag navrae.

Ek is op die oomblik bestuur van 'n MySQL databasis op Amazon se wolk infrastruktuur wat gegroei het tot 160 GB. Navraag prestasie is goed. Wat het geword van 'n nagmerrie is rugsteun, herstel, en voeg by slawe, of enigiets anders wat handel oor die hele datastel, of selfs DDL op groot tafels. Hoe om 'n skoon invoer van 'n stortingsterrein lêer problematies geword. Ten einde die proses stabiel genoeg is om te outomatiseer maak, verskillende keuses wat nodig is om gedoen te prioritiseer stabiliteit oor prestasie. As ons ooit gehad het om te herstel van 'n ramp met behulp van 'n SQL Friends, sal ons aftrek wees vir dae.

horisontaal skalering SQL is ook redelik pynlik, en in die meeste gevalle lei tot die gebruik daarvan op 'n manier wat jy het waarskynlik nie van plan wanneer jy gekies het om jou data in SQL in die eerste plek te stel. Skerwe, lees slawe, multi-meester, et al, hulle is almal regtig shitty oplossings wat die kompleksiteit te voeg tot alles wat jy ooit doen met die DB en nie een van hulle het die probleem opgelos; net verlaag dit in 'n paar maniere. Ek sou raai kyk na die verskuiwing van 'n paar van jou data uit MySQL (of eintlik enige SQL) wanneer jy begin nader 'n datastel van 'n grootte waar hierdie tipe van dinge 'n probleem geword het.

Performance kan verneder in 'n kwessie van 'n paar duisend rye indien databasis nie behoorlik ontwerp.

As jy 'n behoorlike indekse, gebruik behoorlike enjins (nie gebruik MyISAM waar verskeie DMLs verwag), gebruik skeiding, toewys korrekte geheue, afhangende van die gebruik en natuurlik 'n goeie bediener verstellings, MySQL kan data selfs hanteer in terabyte !

Daar is altyd maniere om die databasis te verbeter.

Dit hang af van jou navraag en validering.

Byvoorbeeld, het ek met 'n tafel van 100 000 dwelms wat 'n kolom generiese naam waar dit meer as 15 karakters vir elke dwelm in daardie tafel .I sit 'n navraag aan die generiese naam van dwelms te vergelyk tussen twee tafels het. die soektog neem minute om run.The Dieselfde, as jy die dwelms gebruik van die dwelm-indeks vergelyk, met behulp van 'n ID-kolom (soos hierbo gesê), dit neem slegs 'n paar sekondes.

Database grootte maak nie saak in terme van grepe en tafel se rye nommer. Jy sal 'n groot prestasie verskil tussen 'n ligte databasis en 'n blob gevul een sien. Sodra my aansoek vasgeval omdat Ek sit binêre beelde binne velde in plaas van die behoud van beelde in lêers op die skyf en om net lêername in die databasis. Iterating 'n groot aantal rye aan die ander kant is nie gratis.

Geen dit nie die geval regtig saak nie. Die MySQL spoed is sowat 7 miljoen rye per sekonde. Sodat jy kan dit op die skaal nogal 'n bietjie

scroll top