2 votes

La création d'index MySQL est lente (sur EC2)

J'ai un tableau assez simple

requestparams (
  requestid varchar(64) NOT NULL,
  requestString text,
) ENGINE=MyISAM;

Après avoir alimenté la table avec "LOAD DATA", je modifie le schéma et fais de "requestid" la clé primaire.

Il y a 11 millions de lignes dans cette table et la taille des données est inférieure à 2 Go (taille du fichier MYD). La taille du fichier d'index est d'environ 600 Mo à la fin du processus.

La création de l'index prend moins de 20 minutes sur mon ordinateur portable. Mais, lorsque j'ai exécuté le processus sur l'EC2 d'Amazon (instance moyenne), le processus a pris plus de 12 heures. Pendant toute la durée du processus, le disque était débordé par l'attente d'entrées-sorties (comme le montre l'indicateur top ) entre 40 et 100 %. Le processeur était principalement inactif. Je ne pense pas que le disque sur EC2 soit si lent.

Sur la liste de diffusion MySQL, certains ont suggéré de modifier les variables de serveur myisam_sort_buffer_size & myisam_max_sort_file_size. Je les ai fixées respectivement à 512 Mo et 4 Go. Mais la création d'index était tout aussi lente. En fait, l'utilisation de la mémoire par MySQL dépassait rarement 40M.

Comment puis-je réparer cela ?

Solution : Augmenter "key_buffer_size" a aidé. J'ai fixé cette valeur à 1GB et le processus s'est terminé en 4 minutes. Assurez-vous de vérifier les nouveaux paramètres avec mysqladmin variables commandement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X