sql >> Database teknologi >  >> RDS >> Mysql

Bedste praksis for MySQL-databaseoptimering

Den "bedste praksis" er:

  1. Mål ydeevne, isoler det relevante undersystem så godt som muligt.
  2. Identificer årsagen til flaskehalsen. Er du I/O bundet? CPU bundet? Hukommelse bundet? Venter du på låse?
  3. Foretag ændringer for at afhjælpe den grundlæggende årsag, du har opdaget.
  4. Mål igen for at vise, at du løste flaskehalsen og med hvor meget .
  5. Gå til trin 2, og gentag efter behov, indtil systemet fungerer hurtigt nok.

Abonner på RSS-feedet på http://www.mysqlperformanceblog.com og læs også dens historiske artikler. Det er en enormt nyttig ressource til præstationsrelateret visdom. For eksempel spurgte du om InnoDB vs. MyISAM. Deres konklusion:InnoDB har i gennemsnit ~30 % højere ydeevne end MyISAM. Selvom der også er et par brugsscenarier, hvor MyISAM klarer sig bedre end InnoDB.

Forfatterne af den blog er også medforfattere af "High Performance MySQL", bogen nævnt af @Andrew Barnett.

Re kommentar fra @ʞɔıu:Hvordan man kan se, om du er I/O-bundet versus CPU-bundet versus hukommelsesbundet, er platformsafhængigt. Operativsystemet kan tilbyde værktøjer såsom ps, iostat, vmstat eller top. Eller du skal muligvis anskaffe et tredjepartsværktøj, hvis dit OS ikke tilbyder et.

Dybest set vil den ressource, der er knyttet til 100 % udnyttelse/mætning, sandsynligvis være din flaskehals. Hvis din CPU-belastning er lav, men din I/O-belastning er på sit maksimum for din hardware, så er du I/O-bundet.

Det er dog kun ét datapunkt. Midlet kan også afhænge af andre faktorer. For eksempel kan en kompleks SQL-forespørgsel udføre en filsortering, og dette holder I/O optaget. Skal du kaste mere/hurtigere hardware efter det, eller skal du redesigne forespørgslen for at undgå filsortering?

Der er for mange faktorer til at opsummere i et StackOverflow-indlæg, og det faktum, at der findes mange bøger om emnet, understøtter dette. At holde databaser fungerende effektivt og udnytte ressourcerne bedst muligt er et fuldtidsjob, der kræver specialiserede færdigheder og konstante studier.

Jeff Atwood har lige skrevet en fin blogartikel om at finde flaskehalse i et system:



  1. MySQL SELECT AS kombinere to kolonner til én

  2. Kan jeg fortryde en transaktion, jeg allerede har begået? (tab af data)

  3. Sådan downloades Postgres bytea-kolonne som fil

  4. MySQL får alle berørte rækker for flere udsagn i én forespørgsel