L'instance MySQL d'Amazon RDS exécute très lentement

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

j'ai l'impression que tous mes requêtes, spécialement instruction select, est très lente. Si je vérifie cette question sur mon PC local, il fonctionne très bien. Mais quand j'essaie d'obtenir des données de l'instance RDS, c'est très lent. Certaines des déclarations select prennent 2-3 secondes pour aller chercher données.

j'ai accordé correctement tous les index de table, et normalisé/dé-normalisé selon les besoins. J'ai fait tous les réglages nécessaires sur RDS custom parameter group (par ex. max_connection,tampon etc). Je ne sais pas si je manque quelque chose, mais ça n'a pas marché pour moi - la performance n'a pas augmenté.

Donc, quelqu'un peut-il m'aider avec ce problème?

20
demandé sur John Rotenstein 2013-04-16 15:34:24

6 réponses

il est intéressant de noter que, pour quelque raison que ce soit, le cache de requête MySQL est désactivé par défaut dans RDS. Nous l'avons appris nous-mêmes à la dure cette semaine.

cela n'aidera pas la performance de votre requête initiale, mais cela peut accélérer les choses en général.

Pour ré-activer la mise en cache de requêtes:

  1. ouvrir une session dans le système RDS de la Console
  2. cliquez sur votre instance RDS pour voir les détails
  3. modifier le groupe de paramètres de la base de données
  4. assurez-vous de définir les deux query_cache_size et query_cache_type

(Disclaimer: je ne suis pas administrateur de base de données, donc il y a peut être des choses qui me manque ici)

25
répondu DOOManiac 2014-01-31 20:33:26

il est important d'avoir vos instances RDS et EC2 pas dans la même région mais dans la même zone de disponibilité pour 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 en Virginie USA que nous avions mis en place pour un autre projet et le voyage aller-retour sur chaque requête SQL a rendu l'API inutilisable.

7
répondu Roovian 2014-08-12 07:18:14

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

AFFICHER LA LISTE COMPLÈTE DES PROCESSUS

Vous pouvez en lire plus à ce sujet sur AFFICHER LA LISTE COMPLÈTE DES PROCESSUS

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

alors vous pouvez utiliser

expliquer

Vous pouvez en lire plus à ce sujet sur expliquer

cela vous montrera si vous avez besoin d'amélioration sur votre les requêtes

2
répondu Hiyasat 2014-08-12 08:04:39

RDS MySQL rendement peut être augmenté dans une des manières suivantes à condition que le système a de plus lire ratio:

P1) utilisez des types d'instance plus grands, ils viennent avec une meilleure bande passante NW. Exemple AWS Quadrapule EXL est livré avec une bande de 1000Mbps.

P2) utilisez PIOPS storage vous pouvez extraire 12500 IOPS de 16KB de MySQL DB

P3) si beaucoup de lecture est effectuée, ajouter une ou plusieurs répliques de lecture pour augmenter la performance de lecture

P4) appliquer des pratiques courantes telles que : Réglage des requêtes, appliquer les indices etc

1
répondu Harish Ganesan 2013-04-23 06:41:19

Pour moi, cela n'a rien à voir avec MySQL, mais plutôt le type d'instance, j'ai été sur t2.medium. Le problème est que j'ai manqué de crédits CPU parce que la charge sur le DB était trop élevée et le solde a continué à baisser jusqu'à ce que finalement, je recevais beaucoup moins de crédits horaire que là où nécessaire.

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

enter image description here

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

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

Espérons que cette aide.

1
répondu radtek 2017-12-08 14:14:58

vous pouvez vérifier où la requête prend du temps en utilisant le profilage. Utilisez la requête suivante:

  1. définir le profilage=1
  2. exécuter votre requête select
  3. afficher le profil

cela vous indiquera l'état de la requête et l'endroit où elle passe son temps. Si la somme de tout le temps retourné par le profilage est inférieure au temps d'exécution réel de la requête, alors peut-être d'autres facteurs comme la bande passante du réseau peuvent être cause de celui-ci.

0
répondu xachela 2017-09-25 09:45:05