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?
mysql
performance
Rick James
quelle
quelle
Antworten:
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:
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.
quelle
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.
quelle