MySQL peut-il profiter efficacement de 64 Go de RAM?

Nous avons rencontré un problème dans lequel on interrogeait une table qui a environ 50 millions de lignes et a une taille d'index de 4 Go (taille de table d'environ 6 Go) dans la memory de rlocation du server de database et ralentit considérablement. Je suis sûr que cela a trait à la dépassement de la taille de la table temporaire, et elle est échangée sur le disque.

Si j'ai mis à niveau mon server de database de 32 Go de RAM à 64 Go de RAM, je me request si la database MySQL pourra profiter pleinement de cette memory supplémentaire et ne pas échanger. J'ai parcouru quelques variables (p. Ex. KEY_BUFFER_SIZE, etc …) et elles semblent supporter des valeurs de réglage de plus de 64 Go. Cependant, la documentation MySQL indique que le tmp_table_size maxes à 4 Go.

La valorisation de la memory serait-elle valable? Est-ce que le problème de "search-table large" bénéficierait de cela ou ne serait-il pas utile en raison de la limite de 4 Go? Je sais qu'il y a potentiellement d'autres solutions comme la restructuration de la table pour être réparties de différentes manières, etc. Mais sans changer quoi que ce soit sur la table, la memory supplémentaire aiderait-elle?

De plus, en général, existe-t-il d'autres variables liées à la memory que MySQL ne pourrait pas profiter lorsque vous passez de 32 à 64 Go de RAM?

Nous utilisons 64bit linux (Ubuntu) comme server de database.

Merci, Galen

Si vous utilisez InnoDB, la variable la plus importante à définir est innodb_buffer_pool_size . Je l'installerais à environ 80% de votre memory système. Une fois que vous avez échoué cachés après une certaine utilisation, vos données les plus actives (set de données de travail) seront en memory (innodb_buffer_pool_size) et vos opérations sur elle devraient être très rapides. Avec 64 Go de memory, vous pouvez certainement vous y installer. La memory est toujours un bon achat pour les servers DB.

Oui – si vous utilisez InnoDB et que vous disposez d'une charge de travail à forte intensité de lecture, vous pouvez absolument profiter d'une grande quantité de RAM [en supposant que votre jeu de données sera compatible avec mem – votre server sera en plein écran].

J'utilise MySQL avec stockage InnoDB sur des servers de 8 à 16 Go avec un jeu de travail en memory.

Peut-être vaut-il la peine de mettre du time et des efforts supplémentaires dans la search de ce qui provoque l'échange du système avant de dépenser de l'argent sur la memory?

32 Go de memory laisse beaucoup de memory disponible même après avoir chargé la table entière, l'index et la température maximale dans la memory. Une search rapide a amené ces deux documents qui pourraient être pertinents:

  • Comment MySQL utilise des tables temporaires internes
  • Comment MySQL utilise la memory

Si vous pensez que cela est dû à la création d'une très grande table temporelle, vous pouvez envisager des façons d'améliorer la requête pour éviter les tables temporaires.

Vous pouvez publier sur Stackoverflow une publication contenant le schéma, la requête, le plan d'explication et quelques détails pour le problème.