MySQL Cluster RAM-Anforderung


8

Ab MySQL 5.1 müssen sich die Daten nicht mehr vollständig im Speicher befinden.

Ich habe gelesen, dass sich die indizierten Spalten (ich denke, die gesamte Indexstruktur) noch im Speicher befinden müssen ( MySQL High Availability, 2010, S. 533 , "MySQL Cluster hält alle indizierten Spalten im Hauptspeicher" ).

Was passiert vor diesem Hintergrund, wenn NICHT genügend Speicher vorhanden ist (dh eine große Datenbank (> 100 GB oder 1 TB), die auf Servern mit wenig Speicherkonfigurationen ausgeführt wird (z. B. 2 Datenknoten mit jeweils 1 GB RAM))?


Ich habe dies gefragt, weil ich neugierig geworden bin, was passieren würde, wenn ein Datenknoten nicht über genügend Hauptspeicher verfügt. Wird MySQL Cluster nicht überhaupt einen Teil des Index im Sekundärspeicher behalten? Was ist, wenn ich nicht viel RAM habe und meine Datenbankgröße riesig ist? Dann ist MySQL Cluster für mich keine Option?
gsb

Antworten:


4

MySQL Cluster unterstützt das Speichern nicht indizierter Spalten nur auf der Festplatte mit einem LRU-Cache mit Daten, auf die kürzlich zugegriffen wurde. Indizierte Spalten werden jedoch immer im Speicher gehalten.

MySQL Cluster ordnet den gesamten Speicher gemäß den Parametern DataMemory und IndexMemory vor. Das zugrunde liegende Betriebssystem wird nicht dynamisch nach mehr Speicher gefragt.

Dies bedeutet, dass Sie in Ihrem Cluster genügend Speicher konfiguriert haben müssen, um alle indizierten Spalten im Speicher zu halten. Wenn Ihr Dataset groß genug ist, dass die indizierten Spalten größer als der verfügbare Clusterspeicher sind, können Sie dieses Dataset nicht in den Cluster laden. Irgendwann wird Ihnen der Speicherplatz ausgehen und Ihre Einfügetransaktionen werden abgebrochen.

Wenn Sie DataMemory und IndexMemory konfigurieren, sollten Sie sich auf etwas weniger als den physischen Speicher in jedem System beschränken. Ein Teil des physischen Speichers sollte für das Betriebssystem und andere Prozesse reserviert sein.

Theoretisch kann MySQL Cluster so konfiguriert werden, dass virtueller Speicher über ein Auslagerungsgerät verwendet wird (z. B. mehr als physischer Speicher). Wie in den anderen Antworten angegeben, ist dies jedoch kein Anwendungsfall. Das Austauschen von In-Memory-Strukturen auf die Festplatte ist normalerweise nicht optimal, da In-Memory-Direktzugriffsmuster zu einem Direktzugriff auf die Festplatte führen, was zu Swap-Thrashing und Verlangsamung im gesamten System führt. Bei MySQL Cluster ist das wahrscheinlichste Ergebnis ein Herzschlag- und Clusterfehler, da ein austauschender Datenknoten nicht schnell genug auf Signale reagiert.

Um Indizes mit mehr als Aggregatspeicher effizient zu unterstützen, müsste MySQL Cluster Indexformate auf der Festplatte (möglicherweise einen B-Baum usw.) mit Caching- und Zugriffsmustern unterstützen, die an den Festplattenzugriffseigenschaften ausgerichtet sind.


3

Der MySQL-Cluster basiert auf einer Indexstruktur, die für die Speicheranpassung optimiert ist. ein T-Baum . Dies unterscheidet sich von Ihren regulären Speicher-Engines in MySQL, die eine B-Tree- oder B + -Baumstruktur verwenden, die ohne Speicheranpassung recht gut überleben kann, vorausgesetzt, Sie haben einige Hotspots / ungleichmäßigen Zugriff (dies ist normalerweise eine sichere Annahme ).

Wenn Sie eine Art Proof-of-Concept erstellen möchten, hindert Sie nichts daran, eine große Menge an Swap zu verwenden, um Ihren RAM-Mangel auszugleichen. Beachten Sie jedoch, dass dies nicht gut funktioniert und Sie ein Produkt für einen Anwendungsfall verwenden, für den es nicht entwickelt wurde.


Ihre Antwort und die von Frazer sind ziemlich gut. Aber da er zuerst geantwortet hat, gebe ich ihm die Credits. Hoffe es macht dir nichts aus. :)
gsb

Nein, macht nichts;) Frazer arbeitet mit MySQL-Clustern.
Morgan Tocker

2

Was passiert vor diesem Hintergrund, wenn nicht genügend Speicher vorhanden ist?

Wahrscheinlich das, was Sie erwarten würden, wenn nicht genügend Speicher vorhanden wäre. Dateien werden auf Ihren Laufwerken erstellt und Sie werden so schnell ausgeführt, wie es Ihre Laufwerke zulassen.

Stellen Sie sicher, dass MySQL ordnungsgemäß eingeschränkt wird, damit nicht der gesamte für andere Systemprozesse erforderliche Speicher belegt wird.


1

Grundsätzlich ist eine Kette nur so stark wie ihr schwächstes Glied.

Wenn private virtuelle Server eingerichtet werden (mit VMWare ESX-Cluster einrichten), sollten alle Bare-Metal-Server im Cluster dieselbe RAM-Größe haben.

MySQL Cluster sollte mit der gleichen Art von Kinderhandschuhen behandelt werden. Wenn Server (auch nur 1) weniger Speicher haben als andere in einem Cluster, wäre dies ein begrenzender Faktor. Es würde mich nicht überraschen, wenn ein Server mit 2 GB RAM dazu führt, dass sich andere Server im MySQL-Cluster (selbst wenn diese anderen Server jeweils 8 GB RAM haben) so verhalten, als hätten sie höchstens 2 GB.

Zumindest sollten Sie

Beachten Sie, dass MySQL Cluster auch Daten auf der Festplatte für jeden Server speichern kann, der als Speicherknoten ausgeführt wird

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.