Завершение простаивающих соединений mysql - PullRequest
38 голосов
/ 26 ноября 2010

Я вижу, что многие соединения открыты и долгое время простаивают, скажем, 5 минут.

Есть ли какое-либо решение прекратить / закрыть его с сервера без перезапуска службы mysql?

Я поддерживаю устаревшую систему PHP и не могу закрыть соединения, установленные для выполнения запроса.

Должен ли я уменьшить значения тайм-аута в файле my.cnf по умолчанию до 8 часов?

# default 28800 seconds

interactive_timeout=60
wait_timeout=60

Ответы [ 2 ]

55 голосов
/ 26 ноября 2010

Ручная очистка:

Вы можете УБИТЬ идентификатор процесса.

mysql> show full processlist;
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| Id      | User       | Host              | db   | Command | Time  | State | Info                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| 1193777 | TestUser12 | 192.168.1.11:3775 | www  | Sleep   | 25946 |       | NULL                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+

mysql> kill 1193777;

Но:

  • приложение php может сообщать об ошибках (или веб-сервер, проверьтежурналы ошибок)
  • не исправляйте то, что не сломано - если у вас нет недостатка в соединениях, просто оставьте их.

Автоматический очистительservice;)

Или вы настраиваете свой mysql-сервер, устанавливая более короткий тайм-аут на wait_timeout и interactive_timeout

mysql> show variables like "%timeout%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600  |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)

Установите с помощью:

set global wait_timeout=3;
set global interactive_timeout=3;

(а также укажите в файле конфигурации, когда ваш сервер перезагружается)

Но вы лечите симптомы, а не основную причину - почему соединенияоткрыть?Если сценарий PHP закончен, они не должны закрыться?Убедитесь, что ваш веб-сервер не использует пул соединений ...

3 голосов
/ 21 ноября 2015

Я не вижу никаких проблем, если вы не управляете ими с помощью пула соединений.

Если вы используете пул соединений, эти соединения используются повторно вместо инициации новых соединений.так что, в основном, оставляя открытыми соединения и повторно их использовать, это менее проблематично, чем воссоздавать их каждый раз.

...