Den "bästa praxis" är:
- Mät prestanda, isolera det relevanta delsystemet så bra du kan.
- Identifiera grundorsaken till flaskhalsen. Är du I/O-bunden? CPU bunden? Minnet bundet? Väntar du på lås?
- Gör ändringar för att lindra grundorsaken du upptäckt.
- Mät igen för att visa att du åtgärdat flaskhalsen och med hur mycket .
- Gå till steg 2 och upprepa vid behov tills systemet fungerar tillräckligt snabbt.
Prenumerera på RSS-flödet på http://www.mysqlperformanceblog.com och läs dess historiska artiklar också. Det är en oerhört användbar resurs för prestationsrelaterad visdom. Till exempel frågade du om InnoDB vs. MyISAM. Deras slutsats:InnoDB har ~30% högre prestanda än MyISAM i genomsnitt. Även om det också finns några användningsscenarier där MyISAM överträffar InnoDB.
Författarna till den bloggen är också medförfattare till "High Performance MySQL", boken som nämns av @Andrew Barnett.
Om kommentar från @ʞɔıu:Hur man avgör om du är I/O-bunden kontra CPU-bunden kontra minnesbunden är plattformsberoende. Operativsystemet kan erbjuda verktyg som ps, iostat, vmstat eller top. Eller så kanske du måste skaffa ett verktyg från tredje part om ditt operativsystem inte tillhandahåller ett.
I grund och botten, vilken resurs som än är kopplad till 100 % utnyttjande/mättnad är sannolikt din flaskhals. Om din CPU-belastning är låg men din I/O-belastning är maximal för din hårdvara, är du I/O-bunden.
Det är dock bara en datapunkt. Botemedlet kan också bero på andra faktorer. Till exempel kan en komplex SQL-fråga göra en filsortering, och detta håller I/O upptagen. Ska du kasta mer/snabbare hårdvara på det, eller ska du designa om frågan för att undvika filsortering?
Det finns för många faktorer att sammanfatta i ett StackOverflow-inlägg, och det faktum att det finns många böcker om ämnet stöder detta. Att hålla databaser fungerande effektivt och utnyttja resurserna på bästa sätt är ett heltidsjobb som kräver specialiserad kompetens och ständiga studier.
Jeff Atwood skrev precis en trevlig bloggartikel om att hitta flaskhalsar i ett system: