web-dev-qa-db-fra.com

L'instance Amazon RDS MySQL fonctionne très lentement

J'ai publié mon site Web sur Amazon EC2 (région de Singapour) et j'ai utilisé l'instance MySQL RDS pour le stockage de données. Tout fonctionne très bien sauf la performance.

Il semble que toutes mes requêtes, en particulier l'instruction select, fonctionnent très lentement. Si je vérifie ce problème sur mon PC local, cela fonctionne très bien. Mais lorsque j'essaie d'obtenir des données à partir d'une instance RDS, c'est très lent. Certaines des instructions select prennent 2 à 3 secondes pour extraire des données.

J'ai correctement réglé tous les index de table et normalisé/dé-normalisé selon les besoins. J'ai effectué tous les réglages nécessaires sur le groupe de paramètres personnalisés RDS (par exemple. max_connection , buffer etc). Je ne sais pas si je manque quelque chose, mais cela n'a pas fonctionné pour moi - les performances n'ont pas augmenté.

Alors, quelqu'un peut-il m'aider s'il vous plaît avec ce problème?

24
Manish Sapkal

Il convient de noter que, pour une raison quelconque, le cache de requêtes MySQL est désactivé par défaut dans RDS. Nous avons appris cela à la dure cette semaine.

Cela n'améliorera pas les performances de votre requête initiale, mais cela peut accélérer les choses en général.

Pour réactiver le cache de requêtes:

  1. Connectez-vous à la console RDS
  2. Cliquez sur votre instance RDS pour afficher ses détails.
  3. Modifier le groupe de paramètres de base de données
  4. Assurez-vous de définir à la fois query_cache_size et query_cache_type

(Avertissement: je ne suis pas un administrateur de base de données, il manque peut-être des éléments supplémentaires ici)

27
DOOManiac

Il est important que vos instances RDS et EC2 ne se trouvent pas dans la même région mais dans la même zone de disponibilité afin de minimiser la latence.

J'avais une API hébergée en Irlande sur EC2 et j'ai déplacé la base de données vers un cluster MySQL situé à Virginia, aux États-Unis, que nous avions configurée pour un autre projet. L'aller-retour de chaque requête SQL a rendu l'API inutilisable.

8
Roovian

Pour moi, cela n'avait rien à voir avec MySQL mais plutôt avec le type d'instance sur lequel j'étais t2.medium. Le problème, c’est que j’ai manqué de crédits de processeur parce que la charge de la base de données était trop élevée et que le solde diminuait jusqu’à ce que finalement, je recevais beaucoup moins de crédits à l’heure qu’au besoin.

Voici ce que j'ai vu dans RDS CloudWatch sous Utilisation du crédit CPU:

 enter image description here

Si vous rencontrez le même problème, il est peut-être temps de passer à une autre instance. Voici la liste des types d'instances:

https://aws.Amazon.com/rds/instance-types/

J'espère que cela t'aides.

2
radtek

Les performances MySQL de RDS peuvent être améliorées de différentes manières, en supposant que le système présente un meilleur taux de lecture:

  1. Utilisez des types d'instance plus grands, ils ont une meilleure bande passante NW. Exemple AWS Quadruple EXL est livré avec une bande passante de 1 000 Mbps.
  2. Utilisez le stockage PIOPS, vous pouvez extraire 12 500 IOPS de 16 Ko à partir de la base de données MySQL.
  3. Si de nombreuses lectures sont effectuées, ajoutez un ou plusieurs répliques de lecture pour améliorer les performances de lecture.
  4. Appliquez des pratiques standard telles que: ajuster les requêtes, appliquer les index, etc.
2
Harish Ganesan

Tout d'abord, je recommande fortement de regarder ces requêtes en utilisant

AFFICHER LA LISTE DE PROCESSUS COMPLETE

Vous pouvez en lire plus à ce sujet sur AFFICHER LA LISTE DE PROCESSUS COMPLETE

Cela vous montrera le temps que chaque requête prend.

Ensuite, vous pouvez utiliser 

EXPLIQUE

Vous pouvez en lire plus à ce sujet sur EXPLIQUER

Cela vous montrera si vous avez besoin d'une amélioration sur vos requêtes

2
Hiyasat

Vous pouvez vérifier où la requête prend du temps en utilisant le profilage. Utilisez la requête ci-dessous: 

  1. set profiling = 1 
  2. exécuter votre requête sélectionnée 
  3. montre le profile

Cela vous indiquera le statut de la requête et le moment où la requête passe son temps. Si la somme de tous les temps renvoyés par le profilage est inférieure au temps d'exécution réel de la requête, d'autres facteurs, tels que la bande passante réseau, en sont peut-être la cause.

0
user7562197