it-swarm.com.de

Wie können Sie MySQL auf eine hohe InnoDB-Arbeitslast einstellen?

Angenommen, ein Produktionssystem OLTP System mit überwiegend InnoDB-Tabellen

  • Was sind die häufigsten Symptome eines verstimmten/falsch konfigurierten Systems?
  • Welche Konfigurationsparameter ändern Sie am häufigsten gegenüber ihren Standardeinstellungen?
  • Wie erkennen Sie mögliche Engpässe, bevor ein Problem auftritt?
  • Woran erkennen Sie aktive Probleme und beheben sie?

Alle Anekdoten, die spezifische status Variablen und Diagnosen beschreiben, sind willkommen.

40
Riedsio

hier ist ein guter Artikel über InnoDB-Tuning von Jenny Chen von Sun - sie bloggt viel über MySQL, einige davon sind Solaris-spezifisch (z. B. mit DTrace ), aber das gesamte Blog ist voller interessanter Leckerbissen.

16
Gaius

Interessanterweise können Sie in MySQL 5.5 jetzt mehrere innodb-Pufferpools haben.

Die Parameter, die Sie interessieren, sind

In ungefähr einem Monat werde ich 112 innodb-Pufferpools für einen Client implementieren. Ich werde dich wissen lassen, wie es gelaufen ist.

UPDATE 2011-02-27 21:57 EDT

Ich habe herausgefunden, dass der Maximalwert für innodb_buffer_pool_instances 64 ist. Ich habe mich entschieden, 144 GB zu konfigurieren, also habe ich innodb_buffer_pool_instances auf 18 und innodb_buffer_pool_size auf 8 gesetzt. Ich lade derzeit den Server mit 450 GB

UPDATE 2011-04-28 13:44 EDT

Ich habe mehrere InnoDB-Pufferpools ausprobiert. Es gab zu viele Threading-Sperren und Konflikte. Ich habe auf einen einzelnen Pufferpool mit 162 GB umgestellt und read_io_threads und write_io_threads auf 64 (Maximalwert) gesetzt. Das hat viel besser funktioniert.

UPDATE 2012-07-03 17:27 EDT

Ich habe etwas Erstaunliches über MySQL gelernt. Wenn Sie einen einzelnen monolithischen InnoDB-Pufferpool zuweisen, der größer ist als Insgesamt installiert geteilt durch die Anzahl der physischen CPUs, ist Ihr wird das Betriebssystem aufgrund eines vollständigen InnoDB-Pufferpools zu regelmäßigen Speicherauswechseln anregen. Die als innodb_buffer_pool_instances bekannte Option von MySQL 5.5 kann zum Aufteilen des Pufferpools verwendet werden. Gestern habe ich dies für den Kunden, den ich letztes Jahr in meiner Antwort erwähnt habe, ordnungsgemäß implementiert. Ich habe noch 162 GB für den Pufferpool des Clients. Ich habe die Option innodb_buffer_pool_instances des Servers auf 2 gesetzt, da jeder DB-Server ein dualer Hexacore ist. Ich dachte daran, es auf 12 zu setzen, aber dann zeigte mir ein Kollege ein Blog von Jeremy Cole über MySQL und Swappiness . Nachdem ich es gelesen habe, setze ich es sofort für meinen Kunden in die Praxis um. Ich habe diesen Befehl ausgeführt

numactl --hardware

Ich habe eine Zuordnung von 192 GB Server RAM als 96 GB zu jedem physischen Kern) gesehen. Daher habe ich die innodb_buffer_pool_instances auf 2 gesetzt. Die Dinge sehen jetzt gut aus. Ich werde meine Antwort aktualisieren, um zu sehen, wie dies funktioniert Beeinflusst den Speicheraustausch für die nächsten 2 Monate.

19
RolandoMySQLDBA

Möglicherweise möchten Sie die folgenden Ressourcen erkunden:

Erhöhen Sie zunächst die Standardgröße des InnoDB-Pufferpools in my.cnf (ich glaube, die Standardeinstellung ist 8 MB).

Sie sollten dies wahrscheinlich auf 75% Ihrer RAM Größe (im Allgemeinen) einstellen.

4
Matt Healy