Comment nous tuons les processus de sommeil mysql
+ ------ + ----------- + ----------- + --------------- --------- + --------- + ------ + ---------------- + ------ -------------------------------------------------- ----------------------------------- + | Id | Utilisateur | Hôte | db | Commande | Le temps | Etat | Info | + ------ + ----------- + ----------- + ------------- ----------- + --------- + ------ + ---------------- + ---- -------------------------------------------------- ------------------------------------- + | 2477 | stageuser | localhost | jj_production_11102013 | Requête | 0 | fin | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 | |. 3050 | stageuser | localhost | jj_production_11102013 | Requête | 0 | Résultat du tri | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 | |. 3052 | stageuser | localhost | jj_production_11102013 | Sommeil | 336 | | NULL | | 3056 | stageuser | localhost | NULL | Requête | 0 | NULL | show processlist | | 3057 | stageuser | localhost | jj_production_11102013 | Sommeil | 301 | | NULL | | 3058 | stageuser | localhost | jj_production_11102013 | Sommeil | 299 | | NULL | | 3059 | stageuser | localhost | jj_production_11102013 | Sommeil | 298 | | NULL | | 3061 | stageuser | localhost | jj_production_11102013 | Sommeil | 273 | | NULL | | 3068 | stageuser | localhost | jj_production_11102013 | Sommeil | 251 | | NULL | | 3072 | stageuser | localhost | jj_production_11102013 | Sommeil | 233 | | NULL | | 3111 | stageuser | localhost | jj_production_11102013 | Sommeil | 1 | | NULL | + ------ + ----------- + ----------- + ------------- ----------- + --------- + ------ + ---------------- + ---- -------------------------------------------------- ------------------------------------- + 11 lignes dans l'ensemble (0.00 sec)
Ces processus de mise en veille affectent-ils les performances du site comme des requêtes lentes?
Je l'ai fait.
Créer un fichier kill_sleep.sh
mysql -u<user> -p<password> -h<Host> -e "select concat('KILL ',id,';') into outfile '/tmp/sleep_processes.txt' from information_schema.processlist where Command = 'Sleep'"
mysql -u<user> -p<password> -h<Host> -e "source /tmp/sleep_processes.txt;"
rm -rf /tmp/sleep_processes.txt
Et définissez kill_sleep.sh sur cron job.
La réponse de Vishal fonctionne bien si vous exécutez la commande sur le serveur MySQL, mais cela ne fonctionnera pas si vous vous connectez au serveur à distance ou si vous n'êtes pas autorisé à exécuter SOURCE ou SELECT ... INTO OUTFILE
(par exemple, le RDS d'Amazon). . Il est possible de le réécrire pour ne pas compter sur ces fonctionnalités, et cela fonctionnera n'importe où:
mysql -h<Host> -u<user> -p -e "SELECT CONCAT('KILL ',id,';') FROM information_schema.processlist WHERE Command = 'Sleep'" > sleep.txt
cat sleep.txt | xargs -I% mysql -h<Host> -u<user> -p -e "%"
La syntaxe est la suivante:
KILL thread_id
Dans ton cas:
mysql > KILL 3057
Mais pour supprimer tous les processus de veille, une commande ne peut pas être utilisée, vous devez parcourir toute la liste de processus, après avoir pris tous les processus dans la table tmp et les avoir parcourues:
select concat('KILL ',id,';') from information_schema.processlist where Command='Sleep';
select concat('KILL ',id,';') from information_schema.processlist where Command='Sleep' into outfile '/tmp/a.txt';
Référé de ici
Outils Percona:
pt-kill --match-command Sleep --idle-time 100 --victims all --interval 30 --kill
Cela trouvera toutes les connexions qui sont en mode "veille" et qui resteront inactives pendant 100 secondes ou plus et les tueront. --interval 30 le fera continuer toutes les 30 secondes. Donc, vous pouvez ouvrir un écran -S ptkill puis dans cet écran, exécutez la commande ci-dessus, puis ctrl-A, D pour détacher et quitter le terminal et il continuera simplement à nettoyer vos connexions.
https://www.percona.com/doc/percona-toolkit/2.1/pt-kill.html