MySQL-Datenbank Tuning

Viele Anwendungen nutzen mittlerweile eine Datenbank. Meist ist sie vorinstalliert und man kümmert sich nicht weiter um die Einstellungen. Doch gerade in den DB-Einstellungen liegen oft massive Performance-Einbußen begründet. Dieser Beitrag soll einige hilfreiche Tipps geben, wie man die Einstellungen einer MySQL-Tabelle optimiert.

Erfahrungsgemäß steigt MySQL bei einem Besucheransturm auf eine dynamische Seite als erstes aus. Das liegt daran das ein Großteil
der Installationen die Standard-Konfiguration nicht verändert was u.a. schon die Einschränkung bringt, dass MySQL nur 100 gleichzeitige Verbindungen erlaubt. Und beim 101. macht die Datenbank dann eben dicht.
Die folgenden Tipps sollten einen erheblichen Performance-Schub bringen.

Alle Konfigurationsparameter sind entweder in der /etc/my.cnf in der Sektion [mysqld] einzutragen, z.B.:
[mysqld] set-variable = max_connections=2500 oder als Parameter übergeben z.B.:
safe_mysqld --max_connections=2500 &

Das oben erwähnte Einstellen der max. gleichzetigen Verbindungen ist ein sehr wichtiger Punkt. Oft bemerkt man gar nicht, dass dieses Setting aktiviert ist, wenn man lokal im stillen Kämmerlein eine neue Anwendung mit ein paar Leuten testet. Doch stellt man die Anwendung dann online und es kommen die ersten Besucher, streikt die Datenbank irgendwann – und keiner weiß wieso, weil doch beim Testen alles so schön funktioniert hat.
Wenn man eine stark frequentierte Webseite hat, die bei jedem Aufruf Selects durchführt oder persistente Verbindungen zur
Datenbank verwendet,ist MySQL in der Standard-Konfiguration mit 100 gleichzeitigen Verbindungen schnell am Ende.

MySQL ist in der Lage auch auf schwachen Rechnern viele Verbindungen zu verarbeiten.
Die Variable max_connections sollte mit dem Wert „1000“ bis „2500“ auf einen akzeptablen Wert gebracht werden oder jedoch dem, was Ihre Websiten an gleichzeitigen Benutzern erwarten. Wer sich sicher ist, dass die DB keine Begrenzung braucht, kann auch „0“ einstellen, dann gibt es kein Limit an gleichzeitigen Verbindungen.

Die Parameter key_buffer_size und table_cache sind die wohl wichtigsten performance-bezogenen Variablen. Diese geben an wieviel Speicher MySQL zur Verfügung steht, um Tabellen und Abfrage-Schlüssel zu speichern.
Auf Systemen mit 2 GB-Ram oder mehr und vielen Datenbanken sind folgende Einstellungen zu empfehlen:
key_buffer=128M table_cache=512 sort_buffer=15M

Für Systeme mit moderater RAM-Ausstattung (256 MB – 2 GB) oder wenig Datenbanken sind diese Settings empfehlenswert:
key_buffer=64M table_cache=256 (fuer >= 256MB RAM) oder table_cache=128 (fuer 256MB Ram)
Für diese Systeme reicht auch ein kleiner sort_buffer mit 4 – 8M.

Für Systeme mit 128MB RAM oder weniger sollte man den table_cache nicht einstellen, sondern die Standard-Werte der small.cnf verwenden, jedoch den key_buffer auf 16 oder 32M stellen.

Jan hat 152 Beiträge geschrieben

10 Kommentare zu “MySQL-Datenbank Tuning

  1. ben sagt:

    Hey, danke für den Beitrag aber ich finde so pauschal wie du es geschrieben hast kann man das nicht einstellen. Bitte wer brauch schon 2500 gleichzeitige Connections? Das führt nur dazu das mysql mehr speicher als nötig allokiert. Ich habe ein script von einem mysql-entwickler entdeckt, was den server-status mit den einstellungen gegencheckt und einem dann sagt, welche werte man erhöhen oder verkleiner sollte.

    https://zockertown.de/s9y/exit.php?url_id=3500&entry_id=811
    Beitrag dazu:
    https://zockertown.de/s9y/archives/811-MySQL-tuning-primer.sh.html

    grüße
    ben

  2. admin sagt:

    Das kommt darauf an, ob Du nur über PHPMyAdmin Zugriff auf die Datenbank hast (dann kann man nichts verstellen) oder Du direkt auf das Betrebssystem zugreifen kannst. Am besten Du fragst bei deinem Webhoster mal nach, aber bei Shared Hosting ist es sehr unwahrscheinlich, dass man das dort einstellen kann.

  3. freaky sagt:

    Salü,

    vielen Dank… 🙂
    genau das habe ich gesucht und jetzt sieht das ganze schon ein bischen besser aus bei mir. Habe schon etliche Einstellungen ausprobiert und jeder rät was anderes. Habe Drupal mit extrem vielen Modulen testweise auf einem VServer laufen und habe den Server nicht in den Griff bekommen. Jetzt läuft es halbwegs, aber der Speed ist noch nicht befriedigend. Mal sehen wie die Seite mit einem ordentlichen Server marschiert.

    wünsche ein frohes Fest

  4. Pingback: Technik Blog
  5. Adrian sagt:

    Nach dem neustart des mysql Services und dem setzen von max_connections im Abschnitt mysqld wird bei mir beim Abfragen von max_connection immer noch der Standard Wert 100 ausgegeben. Warum das wohl nicht geladen wir? (MySQL 5.1.46)

  6. Adrian sagt:

    Nein ist die richtige my.ini (Windows) wie ich jetzt gesehen habe hat es unterhalb von meinem Eintrag max_connections nochmals einer welche den Wert auf 100 setzt. Manchmal sieht mann den Wald…

Eine Antwort schreiben

Ihre E-Mail-Adresse wird nicht veröffentlicht. Benötigte Felder sind markiert mit *

You may use these HTML tags and attributes: <a href=""> <blockquote cite=""> <pre lang=""> <b> <strong> <i> <em>