Kann MySQL 64 GB RAM effektiv nutzen?

22

Beim Abfragen einer Tabelle mit ungefähr 50 Millionen Zeilen und einer Indexgröße von 4 GB (Tabellengröße von ungefähr 6 GB) ist ein Problem aufgetreten, das dazu führt, dass der Datenbankserver den Speicher austauscht und sich dramatisch verlangsamt. Ich bin mir ziemlich sicher, dass dies damit zu tun hat, dass die temporäre Tabellengröße überschritten und auf die Festplatte ausgelagert wurde.

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 austauschen kann. Ich habe einige der Variablen durchgesehen (z. B. KEY_BUFFER_SIZE usw.) und sie scheinen das Festlegen von Werten über 64 GB zu unterstützen. In der MySQL-Dokumentation heißt es jedoch, dass die maximale Größe von tmp_table_size 4 GB beträgt.

Würde sich das Speicher-Upgrade also lohnen? Würde das "Abfragen großer Tabellen" -Problem davon profitieren, oder würde es aufgrund der Beschränkung auf 4 GB nicht helfen? Ich weiß, dass es möglicherweise andere Lösungen gibt, z. B. die Umstrukturierung der Tabelle, die auf unterschiedliche Weise partitioniert werden soll, usw. ... Aber würde zusätzlicher Speicher helfen, ohne etwas an der Tabelle zu ändern?

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

Wir verwenden 64bit Linux (Ubuntu) als Datenbankserver.

Danke, Galen

Galen
quelle

Antworten:

5

Wenn Sie InnoDB verwenden, müssen Sie als wichtigste Variable Folgendes festlegen innodb_buffer_pool_size. Ich würde es auf ungefähr 80% Ihres Systemspeichers einstellen. Sobald Sie sich nach einer gewissen Nutzungsdauer im Cache 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 Arbeitsspeicher können Sie definitiv eine Menge hineinpassen. Speicher ist immer ein guter Kauf für DB-Server.

vmfarms
quelle
11

Ja. Wenn Sie InnoDB verwenden und viel lesen müssen, können Sie die Vorteile des großen Arbeitsspeichers voll ausschöpfen (vorausgesetzt, Ihr Datensatz passt in mem - Ihr Server ist blitzschnell).

Ich verwende MySQL mit InnoDB-Speicher auf Servern mit 8 bis 16 GB und einem Arbeitsspeicher.

pQd
quelle
Gleiches gilt für InnoDB mit 64 GB und es ist großartig.
James
9

Vielleicht lohnt es sich, etwas mehr Zeit und Mühe in die Erforschung der Ursachen des Systemtauschs zu investieren, bevor Sie Geld für Speicher ausgeben.

Bei 32 GB Arbeitsspeicher bleibt auch nach dem Laden der gesamten Tabelle, des Index und der maximalen temp_table genügend Arbeitsspeicher verfügbar. Bei einer kurzen Suche wurden diese beiden Dokumente angezeigt, die möglicherweise relevant sind:

Martin
quelle
0

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

Sie können auf Stackoverflow einen Beitrag veröffentlichen, der das Schema, die Abfrage, den EXPLAIN-Plan und einige Details zum Problem enthält.

MarkR
quelle