Multi-Cores und MySQL-Performance


38

Die Bedeutung des Arbeitsspeichers ist eine feststehende Tatsache, aber es ist weitaus weniger Material über die Bedeutung von Kernen und Multithreading verfügbar, wenn es um die Nutzung der CPU durch MySQL geht. Ich spreche über den Unterschied zwischen der Ausführung von MySQL auf 4-Kern-Systemen und 6-Kern-Systemen und 8-Kern-Systemen und so weiter.

Verwenden verschiedene Speicher-Engines die CPU unterschiedlich?



Es ist verwandt, befasst sich jedoch nicht mit dem Verhalten verschiedener Speicher-Engines gegenüber Multi-Core-CPUs.
Rick James

1
Tatsächlich. Aus diesem Grund gibt es keine "Close as Duplicate" -Stimme ...
gbn

Dies ist eine wundervolle Community. Ich lerne immer noch, wie man diese Seite benutzt.
Rick James

Hallo Kumpel, schau mal hier vorbei: mysql-cluster-blog.com findest du wenigstens was

Antworten:


30

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

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

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

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 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 seiner eigenen Denkfabrik in InnoDB für den Multicore-Betrieb aufgenommen hat (seit MySQL 5.1.38).

Da MVCC für Daten in Verbindung mit Zeilen- / Seitensperrung durchgeführt werden muss, kann die Transaktionsleistung jetzt instrumentiert, gemessen und konfiguriert werden.

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

UPDATE 2011-09-20 08:03 EDT

Damit InnoDB von allen Kernen profitiert, müssen wir die Dinge im Auge behalten. Die Kerne müssen auch andere Aufgaben (Betriebssystem, Festplatte, Speicher, Anwendungen, Überwachung usw.) im Datenbankserver übernehmen. Für diejenigen mit bescheidenen Budgets, neigen viele dazu, einen Datenbankserver zu haben, der auch NFS, Überwachung von Munin, App-Unterstützung für JBoss und PHP bietet, und die Liste geht weiter. 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 reserviert sein . Unter dieser Perspektive wird InnoDB zweifelsohne mehr Kerne einbinden .

Das InnoDB-Plugin wurde nur erwähnt, um frühere Initiativen für eine bessere InnoDB seitens MySQL aufzuzeigen (eh, Oracle. Tut mir leid, es ist immer noch nicht so einfach). Neue Variablen, um mehr Kernaktivität hervorzurufen, wurden in MySQL 5.1.38 offensichtlich.

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

Percona befasste sich mit den Anforderungen der MySQL-Community, mit InnoDB auf mehr Kerne zuzugreifen. Infolgedessen folgte MySQL diesem Beispiel. Ich muss zugeben, dass Oracle (yuck) die notwendigen Verbesserungen für mehr Kernaktivität vorgenommen hat.


InnoDB unter MySQL 5.5 kann, wie Sie oben vorgeschlagen haben, von allen Kernen profitieren? {etwas verwirrt über InnoDB-Plugin}
Rick James

@ Rick - Weitere adressierte Ihren Kommentar in meiner Antwort
RolandoMySQLDBA

Hier scheint es eine ganz andere Geschichte zu sein und MyISAM scheint flach auf dem Gesicht zu fallen , wenn es um die Verwendung mit mehreren Kernen kommt aber auf der anderen Seite bei dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM hat vorteile. Es scheint also ein Gleichstand zu sein, zu entscheiden, welchen Weg man einschlagen soll.
Rick James

2
Dies hängt vom Verwendungszweck von MyISAM oder InnoDB ab. Was und wie viel bist du bereit zu cachen? Verlassen Sie sich beim Abrufen von Daten auf MySQL oder andere Caching-Mechanismen (wie Lack und Memcached)? Ist Ihre Hardware für InnoDB richtig skaliert? Sind 98% Ihrer SQL SELECTs? Befindet sich die Tabelle im besten Format für Hochgeschwindigkeitslesevorgänge? Die vorherige Beantwortung dieser Fragen sollte uns bei der Auswahl der Speicher-Engine, der geeigneten Konfiguration und der Hardwareauswahl sowie bei der Erschließung noch tiefer gehender Bereiche wie Hochverfügbarkeit, Datenbanktopologie, Lese- / Schreibaufteilung unterstützen. Diese Liste kann fortgesetzt werden.
RolandoMySQLDBA

9

Ich finde, dass es für Anfänger irreführend sein kann, über Speicher-Engines mit Kernen zu sprechen . Vorausgesetzt, ein Programm ist ausreichend multithreaded, wird es vom Betriebssystem auf so viele Kerne wie möglich verteilt.

Das spezifische Problem, das die CPU-Skalierung einschränkt, besteht darin, dass interner Sperrcode ( Mutexe ) Konflikte aufweist und die gleichzeitige Ausführung von Threads blockiert. Für alle Speicher-Engines sind Mutexe erforderlich, aber in MyISAM gibt es mit Sicherheit einige heiße.

Wenn wir den Mutex-Konflikt für eine Sekunde ignorieren und auf Ihre Hauptfrage zurückkommen: Wie wichtig ist es, viele Kerne zu haben? -

Ich mag es, viele Kerne für Workloads zu haben, die benutzerbezogenen Anforderungen dienen. Viele können die Varianz zwischen den Abfragezeiten verringern. Stellen Sie sich das vor, als würden Sie sich mit 12 offenen Gängen gegen nur 2 im Supermarkt anstellen.

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


5
+1 für die Erwähnung des Elefanten im Raum: Mutex-Streit
cerd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.