MySQL Cluster admite el almacenamiento de columnas no indexadas solo en disco con un caché LRU de datos a los que se accedió recientemente. Sin embargo, las columnas indexadas siempre se mantienen en la memoria.
MySQL Cluster asigna previamente toda la memoria, de acuerdo con los parámetros DataMemory e IndexMemory. No le pedirá al sistema operativo subyacente más memoria de forma dinámica.
Esto significa que debe haber configurado suficiente memoria en su clúster para contener todas las columnas indexadas en la memoria. Si su conjunto de datos es lo suficientemente grande como para que las columnas indexadas sean más grandes que la memoria del clúster disponible, entonces no puede cargar ese conjunto de datos en el clúster. En algún momento se quedará sin espacio, y sus transacciones de inserción serán abortadas.
Al configurar DataMemory e IndexMemory, es mejor limitarse a algo menos que la memoria física en cada sistema. Alguna memoria física debe reservarse para el sistema operativo y otros procesos.
Teóricamente, MySQL Cluster se puede configurar para que use memoria virtual a través de un dispositivo de intercambio (por ejemplo, más que memoria física), pero como dicen las otras respuestas, este no es un caso de uso diseñado. Tener estructuras en memoria intercambiadas en el disco suele ser subóptimo, ya que los patrones de acceso aleatorio en memoria dan como resultado un acceso aleatorio al disco, lo que da como resultado un intercambio y desaceleración en todo el sistema. Con MySQL Cluster, el resultado más probable es la falla de los latidos del corazón y la falla del clúster debido a que un nodo de intercambio de datos no responde a las señales lo suficientemente rápido.
Para soportar eficientemente índices de memoria más grandes que el agregado, MySQL Cluster necesitaría soportar formatos de índice en disco (quizás un árbol B, etc.) con patrones de caché y acceso alineados con las propiedades de acceso al disco.