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.