Debian, MySQL 5.0.51 und der key_buffer

2010-08-12 - kostaki 5 Kommentare »

Ich Idiot © Kati Neudert - Fotolia.com

Ich habe einen MySQL Server der recht gut ausgelastet ist und hauptsächlich MyISAM Tabellen beherbergt. Der Server lief mit 8GB RAM und die Summe der MyISAM Keys überschreitet langsam die 20GB Grenze. Deshalb wollte ich ihn auf 24GB RAM aufrüsten. Das Hardware Update lief problemlos und bereits 2 Stunden nach der Mail an Hetzner lief der Server wieder und jetzt mit 24GB Arbeitsspeicher. Als nächstes passte ich also die MySQL System Variable key_buffer/key_buffer_size an um vom neuen RAM zu profitieren. Leider nutze der MySQL Server den neuen RAM nicht aus und der key_buffer bliebt bei ca. 4GB stehen. Ich dachte mir das es hier wohl ein eingebautes Limit vom MySQL Server gibt, aber hatte gerade keine Zeit mich darum zu kümmern und da man RAM ja nicht gern verschwendet, wollte ich ihn anderen Anwendungen zur Verfügung stellen. Ich setze ihn also auf 6GB und startete den MySQL Server neu. Eine Stunde später ging dann gar nichts mehr. Der MySQL Server stürzte ab und nahm dabei eine Vielzahl an Tabellen mit sich. Im Errorlog erschienen sehr seltsame Fehler, die mir gänzlich unbekannt waren.

Einige Tabellen waren so groß das die Reparatur Probleme machte und kurz nachdem alles wieder lief stürzte der Server wieder ab und alles begann von vorn. Ich habe dann den Arbeitsspeicher getestet, das Filesystem/die Platten überprüft, versucht Backups einzuspielen die alle das gleiche Problem hatten und und und... Bis ich dann einen Ausweichserver einrichten wollte auf dem plötzlich alles ohne Probleme lief. Trotzdem hat es noch eine Weile gedauert bis ich wieder zurück zum Anfang gekommen bin und die System Variable angefasst habe... Problematisch war das es ohne Probleme für 3 Tage lief als ich dem Server noch 19GB zugewiesen hatte und damit nicht an ein Problem an dieser Stelle gedacht habe.

Fazit

Debian Lenny installiert aktuell MySQL 5.0.51. Diese MySQL Version hat ein Limit von 4GB für die key_buffer Größe. Setzt man die Variable trotzdem höher stürzt der MySQL Server ab, zerstört Tabellen und behindert einen bei der Reparatur dieser mit myisamchk. Das alles wäre zu vermeiden gewesen wenn ich mal ins Manual geguckt hätte. Dort steht nämlich ganz genau das erst ab 5.0.52 mehr als 4GB auf 64Bit Systemen erlaubt sind. Was lernt man daraus? Wenn man an System Variablen rum schraubt, immer ins Manual gucken. Veränderungen an einem laufenden System genau dokumentieren und wenn nötig zu einem früheren, funktionierenden Stand zurück kehren.

Wie kann man den key_buffer nun doch auf über 4GB setzen?

Ein Update auf Squeeze hilft, da dort die Version 5.1.49 enthalten ist. Eine andere Lösung ist einen lenny-backport zu benutzen, ein eigenes MySQL Paket oder ein dotdeb.org Paket. Mit einer neueren MySQL Version kann man dann auch einen größeren key_buffer einsetzen.

Ähnliche Artikel

  1. 5 Kommentare

  2. süppchen
    schrieb am 12.08.2010 um 23:42 Uhr

    Hi,

    ich fände deine restliche my.cnf ganz spannend bei solch großen Datenmengen. Ich betreibe einen MySQL-Server mit 8GB RAM und hauptsächlich Innodb’s, so dass sich die innodb_buffer_pool_size und die query_cache_size sehr auf die Performance auswirken.

    Gruss süppchen

  3. kostaki
    schrieb am 13.08.2010 um 08:05 Uhr

    Hi,

    die sollte dir wenig nutzen, da sie komplett auf MyISAM konzipiert ist. Man soll sich ja für ein Backend entscheiden und damit habe ich innodb gleich komplett abgeschaltet und auch keine Settings dafür mehr in der config.

    Gruß kostaki

  4. Falk Husemann
    schrieb am 13.08.2010 um 12:58 Uhr

    Hallo,

    mal aus reinem Interesse: Welches Dateisystem setzt du bei einem so großen Datenbankserver ein und warum?

    Habe selbst mit einigen großen MyISAM Datenbanken zutun und habe von Anfang an auf XFS gesetzt. Habe leider keine vergleichenden Benchmarks :)

    Grüße

  5. kostaki
    schrieb am 13.08.2010 um 19:43 Uhr

    Hi,

    ich benutze eigentlich immer ext3 außer wenn ich sehr viele kleine Dateien habe, dann ReiserFS. Mit XFS hab ich mich noch nicht wirklich auseinander gesetzt, aber das liegt auch daran das ext3 alles macht was ich will/brauche.

    Gruß
    kostaki

  6. voku
    schrieb am 22.09.2010 um 19:43 Uhr

    ggf. kann man sich auch einmal den Mysql-Fork – MariaDB – anschauen, wird vom früheren Hauptentwicklers von MySQL entwickel…

    -> http://de.wikipedia.org/wiki/MariaDB

Kommentar schreiben

*

*