mercredi 21 janvier 2015

Comment arrêter tous les processus qui tournent sur mon serveur MySQL de manière efficace?

Si comme beaucoup de développeur, vous ne faites pas attention  à vos requêtes SQL et à vos connexions ouvertes sur votre serveur MySQL (ou plutôt à fermer vos connexions Mysql après utilisation) vous vous retrouverais très vite submergé par le nombre de processus en cours d’exécution.

pour afficher l'état actuel des processus MySQL, il suffit de faire un :



mysql> SHOW FULL PROCESSLIST
ce qui donne quelque chose comme:
on reviendra sur l’explication de chaque colonne, et surtout du sens de la colonne state dans un autre billet.
ce qui nous intéresse ici, c'est la 1ere colonne Id  (qui représente simplement l'identifiant du processus en cours d’exécution)

je vois 4 méthodes Pouvoir Arrêter tous les processus en exécution (on dit aussi : tuer, ou killer un processus), :

Le tout manuel  

ça pourrait s'appeler, "tuer les processus MySQL , Pour les NULLS"
exécuter cette requête autant de fois qui'l y a de process sur la liste.
mysql> KILL {Id}; # Id doit simplement être replacé par le véritable identifiant de chaque porcess 
exemples:
mysql> KILL 255;
mysql> KILL 263;
si vous avez 4 ,5 process lours qui tourne, ça ira, si vous avez plus et que vous le faites comme ça, ... je pense qu'une discussion s'impose.... vous avez des soucis pour faire passer le temps durant les longues heures de boulot? 

En 2 requêtes

le principe est simple:
  1. Générer les requêtes "kill" sur une seule chaîne de caractères (séparé par un ;)
  2. Les copier/coller et les exécuter directement
et voici la requête :
select group_concat(concat("kill ",ID) separator ";") from information_schema.processlist;
qui donne:
il suffit donc de copier/coller et d'éxecuter:

Le tout SQL

on reprend exactement le même concept que la méthode précédente, sauf qu'on ne passe pas par du copier/coller (pas toujours possible) Mais en passant plutot par un fichier :
il suffit d'éxecuter :
select group_concat(concat("kill ",ID) separator ";") from information_schema.processlist into outfile '/tmp/kill.txt';
en suite:
source /tmp/kill.txt;

Mode barbare

sysadmins, circulez ya rien à voir :)
en fait, c'est la façon la moins recommandée, Mais la plus simple. 
Il suffit simplement de redémarrer votre serveur MySQL .
un simple

sudo service mysql restart
fait l'affaire

j’espère que cela a pu vous rendre service . n'hésitez pas à laisser des commentaires plus bas si vous connaissez d'autres façon de faire.

2 commentaires: