web-dev-qa-db-fra.com

MySQL Cluster RAM Exigence

De MySQL 5.1, les données n'ont plus besoin d'être entièrement en mémoire.

J'ai lu que les colonnes indexées (je pense que toute la structure d'index) doivent encore être en mémoire ( MySQL Haute disponibilité, 2010, p. 533 , "Cluster MySQL conserve toutes les colonnes indexées dans la mémoire principale" ).

À la lumière de cela, que se passe-t-il s'il n'ya pas assez de mémoire (c'est-à-dire une énorme base de données (> 100 Go ou 1 ToB), en cours d'exécution sur des serveurs avec des configurations de mémoire faible (2 nœuds de données, chacun avec 1 Go de RAM, par exemple)?

8
gsb

Le cluster MySQL prend en charge le stockage des colonnes non indexées sur le disque uniquement avec un cache LRU des données récemment accessibles. Cependant, les colonnes indexées sont toujours maintenues en mémoire.

MySQL Cluster prédealLocate Toute mémoire, selon les paramètres de DataMemory et IndexMemory. Il ne posera pas le système d'exploitation sous-jacent pour plus de mémoire de manière dynamique.

Cela signifie que vous devez avoir configuré suffisamment de mémoire sur votre cluster pour contenir toutes les colonnes indexées en mémoire. Si votre jeu de données est suffisamment grand que les colonnes indexées sont plus grandes que la mémoire de cluster disponible, vous ne pouvez pas charger cet ensemble de données dans le cluster. À un moment donné, vous manquerez d'espace et vos transactions d'insertion seront abandonnées.

Lors de la configuration de DataMemory et d'IndexMemorie, il est préférable de vous limiter à quelque peu moins que la mémoire physique de chaque système. Une certaine mémoire physique devrait être réservée au système d'exploitation et à d'autres processus.

Le cluster théoriquement mysql peut être configuré de sorte qu'il utilise une mémoire virtuelle via un périphérique d'échange (par exemple plus que la mémoire physique), mais comme l'état des autres réponses, ce n'est pas un cas d'utilisation conçu. Avoir des structures en mémoire échangées sur le disque est généralement sous-optimale car les modèles d'accès aléatoires en mémoire entraînent un accès aléatoire au disque, ce qui entraîne une batterie de swap et un ralentissement dans l'ensemble du système. Avec le groupe MySQL, le résultat le plus probable est une panne de pulsation et une défaillance du cluster due à un nœud de données d'échange ne répondant pas suffisamment aux signaux.

Pour prendre en charge efficacement des index de mémoire plus gros que globaux, la grappe MySQL devrait prendre en charge les formats d'index sur disque (peut-être un arbre B B, etc.) avec des modèles de mise en cache et d'accès alignés sur des propriétés d'accès à disque.

4
Frazer Clement

Le cluster MySQL est construit autour d'une structure d'index optimisée pour la mise en forme de la mémoire; n T-Tree . Ceci est différent de vos moteurs de stockage habituels dans MySQL qui utilisent un arbre B ou B + arbre Structure, qui peut survivre assez bien à l'extérieur de la mémoire en supposant que vous avez des taches chaudes/accès non uniforme (c'est normalement une hypothèse sûre).

Si vous souhaitez créer une sorte de preuve de concept, rien ne vous empêche d'utiliser une grande quantité d'échange pour compenser votre manque de bélier. Sachez simplement que cela ne fonctionnera pas bien et que vous utilisez un produit pour un cas d'utilisation, il n'est pas conçu pour.

3
Morgan Tocker

À la lumière de cela, que se passe-t-il s'il n'y a pas assez de mémoire

Probablement ce que vous attendez s'il n'y a pas assez de mémoire. Les fichiers seront effectués sur vos lecteurs et vous allez courir aussi vite que vos lecteurs.

Assurez-vous de limiter MySQL correctement de manière à ce qu'il ne consomment pas toute votre mémoire nécessaire à d'autres processus système.

2
Derek Downey

Fondamentalement, une chaîne n'est aussi forte que son lien le plus faible.

Lorsque des serveurs virtuels privés sont configurés (à l'aide de VMware pour configurer les clusters ESX), tous les serveurs métalliques nus dans le cluster sont censés avoir la même quantité de RAM.

Le groupe MySQL doit être traité avec le même type de gants d'enfant. Si des serveurs (même seulement 1) ont moins de mémoire que d'autres dans un cluster, ce serait comme un facteur limitant. Cela ne me surprendrait pas si un serveur avec 2GB RAM est-ce que les autres serveurs du cluster MySQL (même si ces autres serveurs ont chacun 8 Go de RAM) pour se comporter comme si elles avaient au plus 2 Go.

À tout le moins, vous devriez

N'oubliez pas que le cluster MySQL a également la capacité de stocker des données sur disque pour chaque serveur exécutant en tant que nœud de stockage.

1
RolandoMySQLDBA