Die „Best Practice“ lautet:
- Messen Sie die Leistung, indem Sie das relevante Subsystem so gut wie möglich isolieren.
- Identifizieren Sie die Grundursache des Engpasses. Sind Sie E/A-gebunden? CPU gebunden? Erinnerung gebunden? Warten auf Schleusen?
- Nehmen Sie Änderungen vor, um die entdeckte Ursache zu beseitigen.
- Messen Sie erneut, um nachzuweisen, dass Sie den Engpass behoben haben und um wie viel .
- Fahren Sie mit Schritt 2 fort und wiederholen Sie diesen bei Bedarf, bis das System schnell genug arbeitet.
Abonnieren Sie den RSS-Feed unter http://www.mysqlperformanceblog.com und lesen Sie auch seine historischen Artikel. Das ist eine äußerst nützliche Quelle für leistungsbezogene Weisheit. Sie haben zum Beispiel nach InnoDB vs. MyISAM gefragt. Ihr Fazit:InnoDB ist im Durchschnitt ~30% performanter als MyISAM. Allerdings gibt es auch ein paar Anwendungsszenarien, in denen MyISAM InnoDB übertrifft.
Die Autoren dieses Blogs sind auch Co-Autoren von „High Performance MySQL“, dem von @Andrew Barnett erwähnten Buch.
Re-Kommentar von @ʞɔıu:Wie Sie feststellen können, ob Sie E / A-gebunden, CPU-gebunden oder Speichergebunden sind, ist plattformabhängig. Das Betriebssystem kann Tools wie ps, iostat, vmstat oder top anbieten. Oder Sie müssen sich möglicherweise ein Drittanbieter-Tool besorgen, wenn Ihr Betriebssystem keines bereitstellt.
Im Grunde genommen ist wahrscheinlich jede Ressource mit einer Auslastung/Sättigung von 100 % Ihr Engpass. Wenn Ihre CPU-Last niedrig ist, aber Ihre I/O-Last für Ihre Hardware maximal ist, dann sind Sie I/O-gebunden.
Das ist jedoch nur ein Datenpunkt. Das Mittel kann auch von anderen Faktoren abhängen. Beispielsweise kann eine komplexe SQL-Abfrage eine Dateisortierung durchführen, und dies hält die E/A beschäftigt. Sollten Sie mehr/schnellere Hardware darauf werfen oder sollten Sie die Abfrage neu gestalten, um die Dateisortierung zu vermeiden?
Es gibt zu viele Faktoren, um sie in einem StackOverflow-Beitrag zusammenzufassen, und die Tatsache, dass viele Bücher zu diesem Thema existieren, unterstützt dies. Der effiziente Betrieb von Datenbanken und die optimale Nutzung der Ressourcen ist eine Vollzeitaufgabe, die spezielle Fähigkeiten und ständiges Lernen erfordert.
Jeff Atwood hat gerade einen netten Blog-Artikel über das Auffinden von Engpässen in einem System geschrieben: