Frage Kann MySQL effektiv 64 GB RAM nutzen?


Wir haben ein Problem bei der Abfrage einer Tabelle mit ungefähr 50 Millionen Zeilen und einer Indexgröße von 4 GB (Tabellengröße von ca. 6 GB) festgestellt, was dazu geführt hat, dass der Datenbankserver den Arbeitsspeicher ausgelagert hat und erheblich langsamer geworden ist. Ich bin mir ziemlich sicher, dass dies damit zu tun hat, dass die Größe der temporären Tabelle überschritten wird und sie auf die Festplatte ausgelagert wird.

Wenn ich meinen Datenbankserver von 32 GB RAM auf 64 GB RAM aufgerüstet habe, frage ich mich, ob die MySQL-Datenbank diesen zusätzlichen Speicher voll ausnutzen und nicht tauschen kann. Ich habe ein paar der Variablen (z. B. KEY_BUFFER_SIZE usw.) durchgesehen und sie scheinen Einstellungswerte über 64 GB zu unterstützen. Die MySQL-Dokumentation besagt jedoch, dass die tmp_table_size bei 4 GB ausschaltet.

Würde sich das Speicher-Upgrade also lohnen? Würde das Problem "Abfrage großer Tabellen" davon profitieren, oder würde es wegen der Beschränkung auf 4 GB nicht helfen? Ich weiß, dass es potentiell andere Lösungen gibt, wie die Umstrukturierung der Tabelle, die auf verschiedene Arten aufgeteilt werden soll, etc ... aber ohne etwas an der Tabelle zu ändern, würde zusätzlicher Speicher helfen?

Gibt es im Allgemeinen auch andere speicherbezogene Variablen, die MySQL beim Verschieben von 32 auf 64 GB RAM nicht nutzen könnte?

Wir verwenden 64bit Linux (Ubuntu) als unseren Datenbankserver.

Vielen Dank, Galen


22
2017-08-13 17:46


Ursprung




Antworten:


Wenn Sie InnoDB verwenden, ist die wichtigste zu setzende Variable innodb_buffer_pool_size. Ich würde es auf ungefähr 80% Ihres Systemspeichers einstellen. Sobald sich die Caches nach einiger Zeit aufwärmen, befinden sich Ihre aktivsten Daten (Arbeitsdatensatz) im Speicher (innodb_buffer_pool_size) und Ihre Operationen darauf sollten sehr schnell sein. Mit 64 GB Speicher kann man definitiv viel hineinpassen. Speicher ist immer ein guter Kauf für DB-Server.


5
2017-08-15 15:49





Ja - Wenn Sie InnoDB verwenden und eine leseintensive Arbeitslast haben, können Sie große RAM-Beträge absolut nutzen [unter der Annahme, dass Ihr Datensatz in mem passt - Ihr Server wird blitzschnell brennen].

Ich verwende MySQL mit InnoDB-Speicher auf 8-16 GB-Servern mit Arbeitssatz passend im Speicher.


11
2017-08-13 17:58



Auch hier - wir laufen mit InnoDB auf 64-GB-Boxen und es ist großartig. - James


Vielleicht würde es sich lohnen, etwas mehr Zeit und Mühe in die Erforschung dessen zu investieren, was das System austauscht, bevor es Geld für die Erinnerung ausgibt?

32 GB Speicher lassen viel verfügbaren Speicher übrig, selbst nachdem die gesamte Tabelle, der Index und die maximale temp_table in den Speicher geladen wurden. Eine schnelle Suche brachte diese zwei Dokumente hervor, die relevant sein könnten:


9
2017-08-13 21:20





Wenn Sie der Meinung sind, dass eine sehr große temporäre Tabelle erstellt wird, sollten Sie überlegen, wie Sie die Abfrage verbessern können, um temporäre Tabellen zu vermeiden.

Sie können in Stackoverflow einen Post mit dem Schema, der Abfrage, dem EXPLAIN-Plan und einigen Details des Problems posten.


0
2017-09-12 07:48