IPC 2012 Spring

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=2500oder 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.

Schlagwörter: , , , ,

10 Kommentare bisher »

  1. ben sagt

    am 3. Mai 2007 @ 19:21

    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. Lisa sagt

    am 5. Mai 2007 @ 22:10

    Kann man das auch bei einem Webhoster machen? Oder braucht man da admin Rechte auf dem Server?

  3. admin sagt

    am 6. Mai 2007 @ 10:15

    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.

  4. freaky sagt

    am 24. Dezember 2008 @ 05:21

    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

  5. Technik Blog sagt

    am 29. März 2010 @ 07:00

    Danke Jan für Deine Knowledge-Base MySQL auf VServer…

    Deine Knowledge-Base hat mir bei der Konfiguration von 2 Servern geholfen. Vielen Dank…….

  6. Speicherverbrauch für MySQL auf meinem Greatnet VServer | Mearcon sagt

    am 3. November 2010 @ 13:59

    [...] Ich hab ja schon ein paar mal drüber gesprochen. Mein Server bei Greatnet hat sich ein paar mal aufgehängt. Irgendetwas war nicht richtig eingestellt. Und wie sich jetzt heraus gestellt hat, war es der MySQL-Server. Zum Glück konnte ich den Fehler eingrenzen und habe eine kleine Knowledgebase für MySQL auf kleinen VServern gefunden. Wer das gerne selber nachlesen will, hier der Link:  http://phpperformance.de/mysql-datenbank-tuning/. [...]

  7. Adrian sagt

    am 26. Oktober 2011 @ 16:20

    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)

  8. GhostGambler sagt

    am 27. Oktober 2011 @ 15:11

    Falsche my.cnf bearbeitet? Es gibt mehrere. Google hilft weiter.

  9. Adrian sagt

    am 27. Oktober 2011 @ 16:04

    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…

  10. escape sagt

    am 26. Januar 2012 @ 23:01

    Thx das hat mal wunderbar geholfen!!!!!!!!

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name: (erforderlich)

eMail: (erforderlich)

Website:

Kommentar: