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))?
mysql
memory
ndbcluster
gsb
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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
quelle