Mysql
 sql >> Base de données >  >> RDS >> Mysql

Meilleures pratiques pour créer des index sur vos tables MySQL - Rolling Index Builds

En ayant des index appropriés sur vos tables MySQL, vous pouvez grandement améliorer les performances des requêtes SELECT. Mais saviez-vous que l'ajout d'index à vos tables est en soi une opération coûteuse, et peut prendre beaucoup de temps selon la taille de vos tables ? Pendant ce temps, vous risquez également de constater une dégradation des performances des requêtes, car vos ressources système sont également occupées par le travail de création d'index. Dans cet article de blog, nous discutons d'une approche pour optimiser le processus de création d'index MySQL de manière à ce que votre charge de travail habituelle ne soit pas affectée.

Création d'index glissant MySQL

Nous appelons cette approche une « création d'index glissant » :si vous disposez d'un ensemble de réplicas maître-esclave MySQL, vous pouvez créer l'index un nœud à la fois de manière glissante. Vous devez créer l'index uniquement sur les nœuds esclaves afin que les performances du maître ne soient pas affectées. Lorsque la création d'index est terminée sur les esclaves, nous rétrogradons le maître actuel et promouvons l'un des esclaves à jour en tant que nouveau maître. À ce stade, la construction de l'index se poursuit sur le nœud maître d'origine (qui est maintenant un esclave). Il y aura une courte durée (des dizaines de secondes) pendant laquelle vous perdrez la connectivité à votre base de données en raison du basculement, mais cela peut être surmonté en effectuant de nouvelles tentatives au niveau de l'application.

Avantages en termes de performances de la création d'index glissants

Nous avons réalisé une petite expérience pour comprendre les avantages en termes de performances de la création d'index glissants.

Le test a utilisé un ensemble de données MySQL créé à l'aide de Sysbench qui comportait 3 tables de 50 millions de lignes chacune. Nous avons généré une charge sur le maître MySQL avec 30 clients exécutant une charge de travail équilibrée (50 % de lectures et 50 % d'écritures) pendant 10 minutes, et en même temps, nous avons construit un index secondaire simple sur l'une des tables dans deux scénarios :

  1. Créer l'index directement sur le maître
  2. Création de l'index sur l'esclave

Configuration du banc d'essai MySQL

Type d'instance MySQL Instance EC2 m4.large avec 8 Go de RAM
Type de déploiement Ensemble maître-esclave à 2 nœuds avec réplication semi-synchrone
Version MySQL 5.7.25

Résultats de performances

Scénario Débit de la charge de travail (requêtes par seconde) 95e centile de latence
Création d'index sur le maître 453.63 670 ms
Création d'index glissant 790.03 390 ms

À emporter

En exécutant la création d'index directement sur le maître MySQL, nous n'avons pu bénéficier que de 60 % du débit obtenu en exécutant la création d'index sur l'esclave MySQL via une opération de roulement. La latence au 95e centile des requêtes était également 1,8 fois plus élevée lorsque la création de l'index s'est produite sur le serveur maître.

Meilleure pratique pour créer des index sur vos tables #MySQLClick To Tweet

Automatisation de la création de l'index mobile

ScaleGrid automatise la création de l'index mobile pour votre déploiement MySQL avec une interface utilisateur simple pour l'initier.

Dans l'interface utilisateur ci-dessus, vous pouvez sélectionner le nom de votre base de données et de votre table, et « Ajouter un index » comme opération de modification de la table. Ensuite, spécifiez un nom de colonne et un nom d'index, et une commande de modification de table sera générée et affichée pour vous. Une fois que vous avez cliqué sur Créer, la création de l'index se fera un nœud à la fois de manière continue.

En outre, ScaleGrid prend également en charge d'autres opérations simples de modification de table, telles que l'ajout d'une nouvelle colonne à votre table de manière continue. Restez à l'écoute pour mon prochain article de blog avec plus de détails !