Shell Script для автоматического отключения процессов mysql sleep

Как мы убиваем процессы сна mysql Как:

+------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+
| Id   | User      | Host      | db                     | Command | Time | State          | Info                                                                                      |
+------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+
| 2477 | stageuser | localhost | jj_production_11102013 | Query   |    0 | end            | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 |
| 3050 | stageuser | localhost | jj_production_11102013 | Query   |    0 | Sorting result | SELECT * FROM wp_comments WHERE blog_id = 1071 ORDER BY comment_date_gmt DESC LIMIT 0, 50 |
| 3052 | stageuser | localhost | jj_production_11102013 | Sleep   |  336 |                | NULL                                                                                      |
| 3056 | stageuser | localhost | NULL                   | Query   |    0 | NULL           | show processlist                                                                          |
| 3057 | stageuser | localhost | jj_production_11102013 | Sleep   |  301 |                | NULL                                                                                      |
| 3058 | stageuser | localhost | jj_production_11102013 | Sleep   |  299 |                | NULL                                                                                      |
| 3059 | stageuser | localhost | jj_production_11102013 | Sleep   |  298 |                | NULL                                                                                      |
| 3061 | stageuser | localhost | jj_production_11102013 | Sleep   |  273 |                | NULL                                                                                      |
| 3068 | stageuser | localhost | jj_production_11102013 | Sleep   |  251 |                | NULL                                                                                      |
| 3072 | stageuser | localhost | jj_production_11102013 | Sleep   |  233 |                | NULL                                                                                      |
| 3111 | stageuser | localhost | jj_production_11102013 | Sleep   |    1 |                | NULL                                                                                      |
+------+-----------+-----------+------------------------+---------+------+----------------+-------------------------------------------------------------------------------------------+
11 rows in set (0.00 sec)

Являются ли эти процессы сна влияющими на производительность сайта, как медленные другие запросы?

Ответ 1

Я сделал это.

Создать файл 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

И установите kill_sleep.sh для задания cron.

Ответ 2

Ответ на Vishal хорошо работает, если вы используете команду на сервере MySQL, но она не будет работать, если вы подключаетесь к серверу удаленно или если у вас нет разрешения на запуск SOURCE или SELECT ... INTO OUTFILE ( например, Amazon RDS). Можно переписать его, чтобы не полагаться на эти функции, но потом он будет работать где угодно:

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 "%"

Ответ 3

Синтаксис:

KILL thread_id

В вашем случае:

  mysql > KILL 3057

Но для того, чтобы удалить все процессы сна, одна команда не может использоваться, вам нужно выполнить цикл через весь список процессов, после того, как все процессы в таблице tmp и пройдут через него:

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';

Ссылка на здесь

Ответ 4

Percona Tools:

pt-kill --match-command Sleep --idle-time 100 --victims all  --interval 30 --kill

Это обнаружит все соединения, которые находятся в состоянии "сна", и простаивают в течение 100 секунд или более и убивают их. --interval 30 заставит его делать это каждые 30 секунд. Таким образом, вы можете открыть экран -S ptkill, после чего на этом экране выполните приведенную выше команду, затем ctrl-A, D, чтобы отсоединить и выйти из терминала, и он просто продолжит очистку ваших соединений.

https://www.percona.com/doc/percona-toolkit/2.1/pt-kill.html