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?
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:
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)
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.
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:
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.
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:
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
Vous pouvez vérifier où la requête prend du temps en utilisant le profilage. Utilisez la requête ci-dessous:
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.