Home > Linux, Tools > MySQL-Server Optimierung und Defragmentierung

MySQL-Server Optimierung und Defragmentierung

Wenn man selbst einen Rootserver betreibt und einen Apache, PHP und MySQL installiert hat heißt das noch lange nicht, dass sich jede Anwendung von allein optimal einstellt. Ich werde im Folgenden einmal die Optmierung des MySQL-Servers beschreiben. Sie ist wie eigentlich alles an Servereinstellungen einfach zu bewerkstelligen, wenn man nur weiß wie und wo.

Um die Werte der aktuellen Konfiguration des MySQL-Servers zu checken und eventuelle Fehler anzeigen zu lassen kann man sich von diversen Optmierungsscripts helfen lassen. 2 von ihnen, tuning-primer.sh und mysqltuner.pl, möchte ich hier einmal vorstellen. Außerdem ist die Defragmentierung fragmentierter Tabellen eine sinnvolle Maßnahme, die zusätzliche Performance bringen kann.

Wir laden zuerst tuning-primer.sh herunter,

wget http://www.day32.com/MySQL/tuning-primer.sh

setzen die notwendigen Rechte..

chmod 755 tuning-primer.sh

und rufen das Script auf mit

tuning-primer.sh

oder

sh tuning-primer.sh

Normalerweise wird die my.cnf, die ja optimiert werden soll, schon im korrekten Pfad erkannt. Das heißt die erste Frage kann mit nein beantwortet werden. Man sollte nun seinen Login “handy” haben und ja sagen. Nach Angabe der Root-Login-Daten für die SQL-Datenbank wird gefragt, ob eine my.cnf erstellt werden soll. Das kann man mit nein beantworten und die Prüfung der aktuellen Konfiguration rattert durch. Man guckt sich nun die Auswertung an.
Möglich wäre folgende Ausgabe:

Current max_connections = 70
Current threads_connected = 1
Historic max_used_connections = 1
The number of used connections is 1% of the configured maximum.
You are using less than 10% of your configured max_connections.
Lowering max_connections could help to avoid an over-allocation of memory
See "MEMORY USAGE" section to make sure you are not over-allocating

Die Analyse ist einfach zu deuten: Zuerst werden die aktuellen Einstellungen angezeigt, also maximale gleichzeitige Verbindungen sind 70 und eine ist hergestellt. Außerdem wurden maximal eine Verbindung gleichzeitig benutzt (habe den Server gerade neu gestartet). Darunter eine ausformulierte Deutung des Zustandes. tuning-primer denkt natürlich, dass die Anzahl der Verbindungen viel zu hoch eingestellt ist, dafür dass ich sie nicht nutze. Allerdings ist diese Analyse nicht repräsentativ, da tuning-primer noch nicht die Werte vom Abend kennt ;)

Eine weiter Anwendung zur Optimierung des mysql-Servers ist mysqltuner.pl, der sich gerade für Einsteiger etwas übersichtlicher gestaltet und die Hinweise eindeutiger formuliert.

Wir laden ihn einfach herunter:

wget http://mysqltuner.com/mysqltuner.pl

und vergeben die Rechte

chmod +x mysqltuner.pl

und führen es dann aus

./mysqltuner.pl

Auch hier sollte man wieder die Login-Daten parat haben und der Check beginnt. Das Resultat zeigt Fehler an (oder auch nicht) und die Verbesserungsvorschläge sehen dann z.B folgendermaßen aus:

General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    MySQL started within last 24 hours - recommendations may be inaccurate
    Reduce your overall MySQL memory footprint for system stability
    Enable the slow query log to troubleshoot bad queries
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries without LIMIT clauses
Variables to adjust:
    tmp_table_size (> 212M)
    max_heap_table_size (> 212M)

Der Vorteil, den mysqltuner mit sich bringt ist, dass die anzupassenden Variablen gleich genannt werden und man im einfachsten Falle diese Hinweise befolgt. Bei diesem Hinweis könnte ich also in meiner my.cnf (sie liegt bei mir in /etc/mysql/my.cnf) die vorgeschlagenen Werte erhöhen.

Defragmentieren:

Zuletzt noch ein kleiner weiterer Hinweis zur Performance-Steigerung der Datenbank – die Defragmentierung. Bitte VORSICHT bei Arbeiten an der mysql-Datenbank immer VORHER eine SICHERUNG erstellen. Hat man diese, so kann man

mysqlcheck -op --all-databases

eingeben und benötigt wieder einmal das root-Passwort der Datenbank um dann alle Datenbanken zu defragmentieren (kann eine Weile dauern).

Das waren drei Vorgehensweisen, die die Performance-Werte bei schlechter Voreinstellung deutlich verbessern kann und mehr aus einem Server herausholen können, es gibt natürlich noch viele weitere Methoden der Optimierung. Ich gucke mir demnächst auch mal die Optimierung des Apache-Servers an.


Verwandte Artikel:

  1. [Tutorial] Saubere Installation von Nginx mit PHP und MySQL auf Debian
  2. sql Dateien in MySql Datenbank importieren
  3. Serverperformance Testen mit UnixBench
  4. Serverload auf Linuxsystemen überwachen
  5. 100 Posts – Eine kurze Auswertung


  1. 27. Dezember 2009, 22:33 | #1

    Warum kann man im Firefox nicht auf den Trackback-Tab wechseln? Oder funktioniert dies erst, wenn ein regulärer Kommentar veröffentlicht wurde?

  2. 27. Dezember 2009, 22:36 | #2

    Nein, es handelt sich wohl um einen Javascript-Fehler.. “MGJS is not defined”…

  1. 19. Dezember 2009, 09:59 | #1