Когда я запускаю SHOW PROCESSLIST в базе данных MySQL, я получаю следующий результат:
mysql> show full processlist;
+--------+------+-----------+--------+---------+-------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+------+-----------+-------+---------+-------+-------+-----------------------+
| 411665 | root | localhost | somedb | Sleep | 11388 | | NULL |
| 412109 | root | localhost | somedb | Query | 0 | NULL | show full processlist |
+--------+------+-----------+-------+---------+-------+-------+------------------------+
Я хотел бы знать процесс «Сон», который находится под командованием. Что это означает? Почему он работает уже давно и показывает NULL? Это замедляет работу базы данных, и когда я убиваю процесс, он работает нормально. Пожалуйста, помогите мне.
mysql
processlist
gthm
источник
источник
Ответы:
Это не запрос, ожидающий подключения; это указатель соединения, ожидающий окончания тайм-аута.
Это не влияет на производительность. Единственное, что он использует, - это несколько байтов, как и каждое соединение.
Наихудший случай: используется одно соединение вашего пула; Если вы подключитесь несколько раз через консольный клиент и просто закроете клиент, не закрывая соединение, вы можете использовать все свои подключения и дождаться тайм-аута, чтобы снова подключиться ... но это маловероятно :-)
Видите MySql Proccesslist, заполненный записями «Сон», ведущими к «Слишком много подключений»? и /dba/1558/how-long-is-too-long-for-mysql-connections-to-sleep для получения дополнительной информации.
источник
Соединения в состоянии «сна» чаще всего создаются кодом, который поддерживает постоянные соединения с базой данных.
Сюда могут входить пулы соединений, созданные средами приложений, или инструменты администрирования баз данных на стороне клиента.
Как упоминалось выше в комментариях, на самом деле нет причин беспокоиться об этих подключениях ... если, конечно, вы не знаете, откуда идет соединение.
(ПРЕДОСТЕРЕЖЕНИЕ: если у вас есть длинный список таких подключений, может возникнуть опасность исчерпания одновременных подключений.)
источник
Я нашел этот ответ здесь: /dba/1558 . Короче говоря, использование следующего (или в my.cnf) устранит проблему тайм-аута.
SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;
Это позволяет соединениям завершаться, если они остаются в состоянии сна в течение 3 минут (или в зависимости от вашего определения).
источник
Сон означает, что поток ничего не делает. Время слишком велико из-за запроса потока, но не отключать сервер, по умолчанию wait_timeout = 28800; поэтому вы можете установить меньшие значения, например 10. также вы можете убить поток.
источник