it-swarm.com.de

Multi Cores und MySQL Performance

Die Bedeutung von RAM ist eine feststehende Tatsache, aber es ist weit weniger Material über die Bedeutung von Kernen und Multithreading für die Nutzung der CPU durch MySQL verfügbar. Ich spreche über den Unterschied, auf dem MySQL ausgeführt wird 4cores vs 6cores vs 8cores und so weiter.

Verwenden verschiedene Speicher-Engines die CPU unterschiedlich?

38
Rick James

Wenn es um MySQL geht, gibt es keinen Vergleich zwischen Speicher-Engines, außer dass es in zwei grundlegende Kategorien fällt:

MySQL bietet die Verwendung mehrerer Speicher-Engines

Bei den aufgeführten Speicher-Engines sind InnoDB und NDB die einzigen, die ACID-konform sind. Warum ist das wichtig zu erwähnen? Zwei Gründe:

  • Andere Speicher-Engines profitieren einfach nicht von mehr Kernen als der grundlegenden Festplatten-E/A, der CPU-Auslastung und dem Gesamtdurchsatz.
  • Der Code für jede nicht-transaktionale Speicher-Engine, der im Wesentlichen 14 interne Vorgänge unabhängig von der Speicher-Engine vorschreibt, wurde nicht entwickelt, um den Zugriff auf mehrere Kerne zu nutzen.

InnoDB unter MySQL 5.5, InnoDB Plugin) und XtraDB von Percona Server verfügen über Optionen, die Sie festlegen können, um auf mehrere Kerne zuzugreifen (Percona Server hat dies schon länger getan). Tatsächlich fügt Percona mit jeder neuen GA Version des MySQL-Quellcodes etwa 30.000 Codezeilen speziell zur Leistungssteigerung von InnoDB ein. Wir können sicher sein, dass Oracle seine eigenen Verbesserungen aus seinem eigenen Think Tank aufgenommen hat, die in InnoDB für den Multicore-Betrieb ausgeführt werden sollen (seit MySQL 5.1.38).

Da MVCC für Daten in Verbindung mit dem Sperren von Zeilen/Seiten ausgeführt werden muss, kann die Transaktionsleistung jetzt instrumentiert, gemessen und konfiguriert werden.

Wenn ich etwas über die Verwendung mehrerer Kerne gelernt habe, ist es das Sie müssen InnoDB effektiv optimieren und sich nicht nur sofort auf InnoDB verlassen .

UPDATE 20.09.2011 08:03 EDT

In Bezug auf InnoDB, das von allen Kernen profitiert, müssen wir die Dinge im Auge behalten. Die Kerne müssen sich auch um andere Angelegenheiten (Betriebssystem, Festplatte, Speicher, Anwendungen, Überwachung usw.) im Datenbankserver kümmern. Für diejenigen mit bescheidenen Budgets haben viele einen Datenbankserver, der auch NFS, Überwachung von Munin, App-Unterstützung für JBoss, PHP und die Liste bietet. Wenn MySQL, genauer gesagt InnoDB, mehr Kerne verwenden soll , muss der Datenbankserver ausschließlich für MySQL reserviert sein und das Betriebssystem/die Festplatte/der Speicher dürfen nur für MySQL verwendet werden. In dieser Perspektive wird InnoDB ohne Zweifel mehr Kerne einschalten.

Was das InnoDB-Plugin betrifft, wurde es nur erwähnt, um frühere Initiativen zu zeigen, um eine bessere InnoDB seitens MySQL zu haben (eh, Oracle. Entschuldigung, es rollt immer noch nicht von der Zunge). Neue Variablen, um mehr Kernaktivität hervorzurufen, wurden aus MySQL 5.1.38 ersichtlich.

Beispiel: innodb_read_io_threads und innodb_write_io_threads (beide seit MySQL 5.1.38) weisen die angegebene Anzahl von Threads für Lese- und Schreibvorgänge zu. Die Standardeinstellung ist 4 und das Maximum ist 64. Die so unterschiedlichen Standardeinstellungen und Maximaleinstellungen (4 - 64) zeigen, dass InnoDB so multithreaded und kernintensiv ist, wie Sie es konfigurieren !!!

Percona ging auf die Bedürfnisse der MySQL-Community ein, um mit InnoDB auf mehr Kerne zuzugreifen. Infolgedessen folgte MySQL. Ich muss zugeben, dass Oracle (yuck) die notwendigen Verbesserungen für mehr Kernaktivität vorgenommen hat.

30
RolandoMySQLDBA

Ich finde, über Speicher-Engines zu sprechen using Kerne können für Anfänger irreführend sein. Vorausgesetzt, ein Programm ist ausreichend multithreaded, plant das Betriebssystem es über so viele Kerne wie möglich.

Das spezifische Problem, das die CPU-Skalierung einschränkt, besteht darin, dass der interne Sperrcode ( Mutexe ) Konflikte aufweist und die gleichzeitige Ausführung von Threads blockiert. Alle Speicher-Engines benötigen Mutexe, aber es gibt sicherlich einige heiße in MyISAM.

Wenn wir Mutex-Konflikte für eine Sekunde ignorieren und zu Ihrer Hauptfrage zurückkehren: wie wichtig ist es, viele Kerne zu haben ? -

Ich mag es, viele Kerne für Workloads zu haben, die benutzerbezogene Anforderungen bedienen. Wenn Sie viele haben, kann dies die Varianz zwischen den Abfragezeiten verringern. Stellen Sie sich das so vor, als würden Sie sich im Supermarkt mit 12 offenen Gängen gegen nur 2 anstellen.

Update : Ich habe einen Blog-Beitrag darüber geschrieben, warum vertikale Skalierbarkeit (Multi-Cores) wichtig ist.

9
Morgan Tocker