MySQL 5.5 - Ermitteln der korrekten Schreib- [Lese-] _io_Threads auf einem High-End-System?

7

Speziell Dual-CPU 32 Core - 128RAM - RAID 10 SSD. Ubuntu 64 Server.

Zeitweise hohe Innodb-Last - ~ 2000+ Abfragen pro Sekunde. Schweres Lesen und Schreiben.

Derzeit verwenden wir die Standardwerte write_io_threads von 4.

"Nerfing" wir die Leistung unseres Servers? Ist es sicher, es auf max write_io_threads = 64 und read_io_threads = 64 auszuführen?

Wie wird diese Nummer ermittelt?

Tom Geee
quelle

Antworten:

6

Am 15. März 2012 beantwortete ich diese Frage: MySql empfahl Hardware .

In meiner Antwort erwähnte ich einen Kunden, der bis heute im Webhosting-Unternehmen meines Arbeitgebers tätig ist. Derzeit werden 3 DB-Server in Circular Replication ausgeführt. Jeder DB Server hat:

  • MySQL 5.5.9
  • 192 GB RAM
  • 162 GB InnoDB-Pufferpool
  • Dual Hexacore (das ist richtig, 12 CPUs)
  • 1,8 TB Festplattenvolumen
  • 528 mandantenfähige Datenbanken
  • 500 GB InnoDB-Daten
  • innodb_file_per_table aktiviert

Ich habe sie eingestellt

innodb_read_io_threads = 64
innodb_write_io_threads = 64
innodb_thread_concurrency = 0
innodb_buffer_pool_size = 162G
innodb_buffer_pool_instances = 2
innodb_log_file_size = 384M

Fazit: Sie haben die Kerne und 128G RAM? Worauf wartest du ? Dreh es auf und hab Spaß. Mein Kunde ist seit März 2011 mit diesen Einstellungen gegen diese Hardware fast verblüfft. Sie werden begeistert sein !!!

VORBEHALT

Abgesehen von Scherzen sollten Sie vorsichtig sein, wenn Sie mit VMs (VMWare, AWS, andere Cloud-basierte MySQL-Instanzen) oder Standardhardware arbeiten . Bei so viel Feuerkraft in Bare-Metal sollten Sie diese Einstellungen jedoch unbedingt ausnutzen, da jede Version von MySQL vor MySQL 5.5 mit InnoDB mit einem Thread funktioniert. Wenn Sie MySQL 5.1 haben, muss das InnoDB-Plugin (ab MySQL 5.1.38) installiert und dann festgelegt werden. Alle Percona Server 5.1-Binärdateien verfügen bereits über diese. Da Sie über MySQL 5.5 verfügen, werden diese Einstellungen nativ installiert und in vielerlei Hinsicht getestet. Sie müssen nur die Verantwortung für die Optimierung der neuen InnoDB-Einstellungen übernehmen.

Weitere Informationen zum Festlegen der neuen Einstellungen von InnoDB finden Sie in meinen anderen Beiträgen:

UPDATE 2013-01-18 21:52 EDT

Sie müssen den Stier bei den Hörnern packen und einige Benchmarks setzen. Gehen wir historisch zurück. innodb_read_io_threads und innodb_writes_io_threads wurden nicht mit MySQL 5.0 oder 5.1 geliefert. Jemand hat ein Plugin erstellt und es in MySQL 5.1.38 verfügbar gemacht. Die Standardeinstellungen waren 4. Ich stelle auch fest, dass Percona Server diese Dinge früh in MySQL 5.1 mit Standardeinstellungen von 8 implementiert hat. Die meisten Leute, die Percona Server sofort verwenden, schwören darauf und sagen oft, dass es besser als MySQL ist. Dieser Vergleich wird jedoch normalerweise mit dem Tweeking von InnoDB durchgeführt. Natürlich wäre Percona Server mit der doppelten Anzahl von Threads besser.

Angesichts dieser konservativen Methode, um eine bessere Leistung zu erzielen (Upgrade auf Percona), werden Sie nie wirklich wissen, wie gut, schlecht oder hässlich InnoDB sein wird, wenn Sie sich nicht darauf einstellen. Denken Sie an meinen Beitrag vom 24. November 2011 . Mehrere Versionen von MySQL wurden verglichen und in einigen Fällen übertraf InnoDB unter MySQL 4.1 5.x in einer Single-Threaded-Umgebung . Das ist bei gleichen Wettbewerbsbedingungen gegeben.

Um die Waage zu Ihren Gunsten zu kippen, müssen Sie InnoDB optimieren. Anstatt Ihnen einen einzigen endgültigen Pick-This-Pick-That-Leitfaden zu geben, müssen Sie sich über die Einstellungen informieren, die InnoDB vorgenommen hat, um mehrere Kerne zum Leben zu erwecken. Nicht jede Umgebung ist wie die Dual-Hexacore-Server meines Clients oder Ihr Dual-Hexadecacore.

Wenn ich Ihnen einen guten Ausgangspunkt geben müsste, wäre es das mysqlperformanceblog.com. Alles, was mit Leistung auf MySQL zu tun hat, können Sie lesen, auswählen und bewerten.

RolandoMySQLDBA
quelle
Danke ein paar gute Infos da. Woher weiß ich also, ob ich write_io_threads von 4 oder 32 oder 64 verwenden soll? Was bestimmt (was die Hardware betrifft?) Diese Variable neben dem offensichtlichen Benchmarking-Versuch und -Fehler? Könnte ich den Produktions-DB-Server mit einer falschen Einstellung komplett blockieren?
Tom Geee
OMG, asynchrone Replikation mit drei Knoten !!! Jemand wird umgehauen, wenn Sie einen Server verlieren.
Symcbean