Tutorial: MySQL Performance-Tuning

Tutorial: MySQL Performance-Tuning

Teil 3 des Workshops "Performance-Tuning für Ihre Website"

von -

Schnelle Lade- und Zugriffszeiten einer Webseite sind im wahrsten Sinne Gold wert, wenn mit ihr Geld verdient werden soll. Ein Performance-Tuning auf einem Webserver muss mehrere Features und Applikationen berücksichtigen. In diesem Tutorial werden die Einstellungen der weltweit am häufigsten eingesetzten Open-Source-Datenbank-Anwendung MySQL durchleuchtet.

 

Bei Datenbank-Systemen kommt es immer auf eine gute Hardware an. Daneben können Sie das Speicher- und Prozessmanagement optimieren und mit etwas Eigeninitiative auch die Geheimnisse der langsamen Queries herausfinden.

 

Die Wahl der richtigen Physik

Vorsicht ist hier geboten. Während Sie bei Apache oder PHP mit intelligenten Einstellungen die Prozessbearbeitung optimieren können, kommt es bei einer Datenbank zusätzlich auf eine gute Hardware an. Andernfalls haben Sie hier in Sachen Geschwindigkeit schnell einen Flaschenhals. Sie müssen genau abwägen, wo Sie Ihre MySQL-Applikation sowie die von ihr gesteuerten Datenbanken vorhalten wollen. Klassische Hosting-Pakete bieten Ihnen pauschale Lösungen an, auf deren technischen Hintergrund Sie nur einen geringen Einfluss haben. Sorgt Ihr Online-Shop oder Ihre vergleichbare Webapplikation für große Mengen an Datenbankanfragen, empfiehlt sich eine Hosting-Lösung mit einer flexibel gestaltbaren Hardware. Reicht sie nicht aus, kommt es unweigerlich zu Wartezeiten. Anfangs stauen sich die Verbindungsversuche nur. Je mehr Anfragen auflaufen, desto wahrscheinlicher wird jedoch ein Kollaps des Servers bzw. der MySQL-Datenbank. Auf der anderen Seite kann eine einzige Anfrage den Server zum Stehen bringen. Um dem vorzubeugen, sollten Sie die Art der Zugriffe auf Ihre Datenbanken im Vorwege klären. Das Beste ist auch in Ihrem Fall gerade gut genug. Diese Bauteile sollten Sie auf jeden Fall prüfen:

Arbeitsspeicher:
Es kommt auf jeden Fall zu Performance-Engpässen, wenn der Arbeitsspeicher des physischen oder virtuellen Servers für die Masse der SQL-Abfragen nicht ausreicht. Planen Sie so viel RAM wie möglich ein. Ein Zuviel gibt es hier nicht.

Netzwerkkarte:
Stellen Sie sich vor, ein Kunde möchte größere Datenmengen aus der MySQL-Datenbank herunterladen. Hat Ihr Server nun eine billige Netzwerkkarte mit einer entsprechend geringen Bandbreite, darf Ihr Kunde lange warten, bis der Download abgeschlossen ist.

CPU:
Natürlich braucht Ihr MySQL-Server eine gute CPU. Welche Variante (z. B. 4x 3 GHz oder 8 x 2 GHz) für Ihre Zwecke am besten ist, kann nur individuell geklärt werden.

Festplatte:
Die Empfehlung lautet SSD. Der Performance-Gewinn gegenüber einer herkömmlichen Magnetfestplatte ist enorm.

>> Unser Tipp: Dedizierter Server mit 4x 4,4 GHz i7 Prozessor & SSD für unter 50 Euro

 

Optimierung des Speicher- und Prozessmanagements

Sie können Tools wie den MySQL Tuner verwenden, aber es empfiehlt sich, ein wenig Kenntnis darüber zu haben, an welchen Stellschrauben gedreht werden muss. Die Einstellungen werden in der Datei „/etc/mysql/my.cnf“ vorgenommen, von der Sie vorher mit dem cp-Befehl sicherheitshalber eine Kopie anlegen sollten. Gehen Sie Schritt für Schritt vor. Nach jeder Änderung sollten Sie MySQL neu starten und den Server bzgl. auftretender Fehler überwachen. Hier sind einige Parameter, die Sie anpassen können:

key_buffer
– erlaubt die Inanspruchnahme von mehr Arbeitsspeicher
– sehr wirkungsvoll, wenn genug RAM vom System freigegeben ist

max_allowed_packet
– maximale Größe eines Paketes, das versendet werden darf.
– Ein Paket ist einzelne SQL-Zeile, die an einen Client versendet wird, oder ein Log, das vom Master zum Slave geschickt wird.

thread_stack
– Größe des Stapels („Stack“) für jeden Strang („Thread“)
– Der Standardwert steht für eine normale Nutzung.
– Tritt ein Fehler auf, kann dieser Wert erhöht werden

thread_cache_size
– Steht der Wert auf 0 (Status: aus), erhalten alle neuen Verbindungen einen neuen Strang.
– Wenn die Verbindung abbricht, ist der Thread verloren.
– Ein anderer Wert als 0 gibt die Anzahl der ungenutzten Stränge an, die im Cache zur weiteren Verwendung zwischengelagert werden.
– Normalerweise hat dieser Parameter nur geringe Auswirkungen. Bekommt Ihre Webseite Hunderte Verbindungsanfragen pro Minute, sollte dieser Wert zu einem geeigneten Zeitpunkt angepasst werden, um die Zugriffe über den Cache schnellstmöglich herzustellen.

max_connections
– Maximale Anzahl an gleichzeitig erlaubten Verbindungen
– Es empfiehlt sich, die Masse der Connections vorab herauszufinden und den Wert so anzupassen, dass ein wenig „Luft“ bleibt.

table_cache
– Sollte höher sein als der Parameter open_tables (show status like ‚open%‘).

 

Datenbank-Bremser finden

Wenn Sie nicht zu den Spezialisten gehören, die nur einmal ins System schauen müssen und sofort wissen, woran es hapert, sollten Sie detaillierte Analysen vornehmen. Häufig sind es bestimmte Datenbankabfragen, die das ganze System ausbremsen können. Fürs Aufspüren gibt es kein Universalrezept, aber MySQL hat ein geeignetes Bordmittel dabei. Dafür müssen Sie das „Slow Query Log“ einschalten. Die folgenden Systemvariablen müssen Sie mit den nebenstehenden Werten versehen:
slow_query_log 1 – MySQL loggt langsame Queries automatisch mit
slow_query_log_file datei – „datei“ steht für die Log-Datei, in die MySQL die Auswertungen schreiben soll
long_query_time xx – gibt an, ab wie vielen Sekunden ein Query als langsam eingestuft werden soll (Der Standard ist 10, was für viele Webapplikationen zu lang ist.)

Daneben können Sie mit EXPLAIN die interne Arbeit Ihrer Datenbanken untersuchen. Bei anhaltenden Problemen lohnt es sich, tiefer in dieses Thema einzusteigen und die unterschiedlichen MySQL-Join-Typen kennenzulernen. Das vereinfacht die Fehlersuche deutlich.

 

Dieser Artikel ist Teil des Workshops “Performance-Tuning für Ihre Website” – Eine Übersicht aller Teile des Workshops finden Sie hier.

 

 

 

Artikelbild: © fotolia.com / kran77

 

Keine Kommentare

Kommentar hinterlassen (Freischaltung erfolgt in Kürze)