Nous rencontrons des problèmes avec les utilisateurs exécutant des requêtes / vues dans Drupal qui provoquent parfois le gel de notre site. Le gel se produit car la requête fait monter le nombre de connexions à la base de données jusqu'à 400+ et, fondamentalement, chaque fois que le site dépasse 100 connexions à la base de données, le site ralentit terriblement et ne répond tout simplement pas.
Nous exécutons Amazon RDS à l'aide de MySQL Red Hat Linux
Nous avons un EC2 assez grand sur le serveur d'applications frontal et un RDS assez grand.
La façon dont nous résolvons ce problème maintenant est de trouver la requête incriminée et de la tuer. Une fois la requête supprimée ... nos connexions à la base de données tombent à environ 20, ce qui est le montant normal que vous voyez lors de la surveillance des statistiques du site.
Existe-t-il un moyen d'arrêter la requête incriminée et de la tuer avant qu'elle ne s'exécute trop longtemps et consomme les connexions? J'essaie d'automatiser la suppression de la mauvaise requête avant qu'elle ne se produise, ou du moins de réaliser après 30 secondes que c'est une mauvaise requête et de la tuer.
la source
Réponses:
Voici une procédure stockée pour tuer les SELECT de longue durée
Pour tuer les SELECT qui durent plus de 30 secondes, vous exécutez ceci
Si vous voulez voir les connexions tuées, vous exécutez cette
Vous pouvez peut-être créer un événement MySQL pour appeler cette procédure stockée toutes les minutes.
Si Amazon ne vous accorde pas le privilège EVENT , vous devrez écrire un script shell externe sur le serveur EC2 pour vous connecter à la base de données et exécuter la procédure stockée. Ce script shell peut être placé dans une crontab.
Si Amazon ne vous laisse pas disposer des privilèges PROCESS et SUPER , vous devrez peut-être déplacer la base de données de RDS et vers une autre instance EC2 exécutant MySQL pour y parvenir. Vous pouvez ensuite créer l'événement MySQL sans les restrictions d'hébergement d'Amazon.
la source