Je recherche un script bash bien testé (ou une solution alternative) pour le faire, afin d'éviter que max_connection ne soit épuisé. Je sais qu'il combat les symptômes, mais j'ai vraiment besoin d'un tel script comme solution à court terme.
linux
mysql
query
kill-process
alfish
la source
la source
Réponses:
consultez la commande pt-kill de la boîte à outils percona .
et .. commencez à surveiller votre système - munin , cacti avec de meilleurs modèles de cactus pour mysql , n'importe quoi pour que vous ayez une idée de ce qui se passe. la journalisation des requêtes lentes mysql sera également une bonne idée.
la source
Si vous avez MySQL 5.1 où la liste de processus se trouve dans INFORMATION_SCHEMA, vous pouvez le faire pour générer les commandes KILL QUERY en bloc à partir du client mysql pour une requête de plus de 20 minutes (1200 secondes):
Vous pouvez faire des clauses WHERE sur le champ INFO pour rechercher une requête spécifique, le champ TIME sur les requêtes de longue durée ou le champ DB sur une base de données spécifique.
Si vous êtes root @ localhost, vous devriez avoir tous les privilèges pour l'exécuter comme suit
Vous pouvez créer ceci comme suit:
Voici une autre variante:
BTW Vous n'avez pas spécifié de myDB car j'ai explicitement lu dans information_schema.processlist un nom de table complet.
Voici une démonstration de ce que vous devriez voir. Pour cet exemple, je ferai écho à la commande KILL de tous les processus dont le temps> 20000 secondes:
Je pratique cette technique depuis 5 ans. En fait, j'ai soumis cette réponse au DBA StackExchange l'année dernière et elle a été acceptée .
la source
J'ai trouvé le code suivant coupé ici :
Mise à jour 2013-01-14: Il y avait une indication anonyme que cela est potentiellement dangereux et peut également tuer les processus de réplication. Utilisez donc à vos risques et périls:
la source
MySQL 5.7 et versions ultérieures, vous pouvez utiliser la variable max_execution_time pour que cela se fasse automatiquement pour toutes les requêtes de lecture "SELECT".
la source
Je n'essaierais pas les solutions bash si vous aimez la disponibilité!
Si vous avez accès au code, vous pouvez réellement définir le temps d'exécution maximal sur les instructions SELECT à l'aide de la méthode décrite ici :
Sinon, sur le serveur:
/programming/415905/how-to-set-a-maximum-execution-time-for-a-mysql-query
Installez pt-kill:
Prenez un instantané de votre liste de processus:
Testez pt-kill sur l'instantané:
Assurez-vous que les règles du match conviennent à votre cas. Celles ci-dessus tueront toutes les instructions Execute en 45 secondes. Une fois que vous êtes sûr, modifiez et exécutez cette commande pour exécuter l'instruction à un intervalle de 10 secondes:
la source