dilluns, 11 de novembre de 2013

MySQL connections mass killing

Si ens veiem amb la necessitat de matar connexions de MySQL masivament, el següent tutorial ens pot resultat d'utilitat. La següent taula conté la informació que obtenim quan realitzem un show processlist;
SELECT * from information_schema.processlist;
626 rows in set (0.00 sec)
La taula conte els següents atributs:
mysql> describe information_schema.processlist;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ID      | bigint(4)   | NO   |     | 0       |       |
| USER    | varchar(16) | NO   |     |         |       |
| HOST    | varchar(64) | NO   |     |         |       |
| DB      | varchar(64) | YES  |     | NULL    |       |
| COMMAND | varchar(16) | NO   |     |         |       |
| TIME    | int(7)      | NO   |     | 0       |       |
| STATE   | varchar(64) | YES  |     | NULL    |       |
| INFO    | longtext    | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
8 rows in set (0.02 sec)
Per tant, si en algun moment tenim moltes connexions en el show processlist i necessitem matar-les podem utlitzar aquesta taula per generar la llista de connexions a matar.
SELECT CONCAT('KILL ',id, ';') from information_schema.processlist \
where user='someone' into outfile 'mass_kill.out';
Si mirem el contingut del fitxer mass_kill.out trobarem alguna cosa semblant a:
+-------------------------+
| CONCAT('KILL ',id, ';') |
+-------------------------+
| KILL 2039971;           | | KILL 2039970;           | | KILL 2039968;           | | KILL 2039967;           | | KILL 2039966;           | | KILL 2039960;           | | KILL 2039959;           | | KILL 2039958;           | | KILL 2039955;           | | KILL 2039954;           | | KILL 2039953;           | | KILL 2039951;           | | KILL 2039950;           | | KILL 2039949;           | | KILL 2039948;           | | KILL 2039947;           | ...

Per a carregar-nos les connexions només hem d'executar la següent comanda:
mysql> source /tmp/mass_kill.out
Si necessitem guardar les comandes utlitzades així com canviar el pager per defecte la següent comanda ens pot resultar útil.
mysql> \P cat | tee /home/user/mysql_output.txt | less -n -i -S
PAGER set to 'cat | tee /home/user/mysql_output.txt | less -n -i -S'
mysql> SELECT * from information_schema.processlist;

ENLLAÇOS:


http://www.dbasquare.com/2012/05/15/why-do-threads-sometimes-stay-in-killed-state-in-mysql/
http://www.percona.com/doc/percona-toolkit/2.1/pt-kill.html
http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/

Cap comentari:

Publica un comentari a l'entrada