SHOW PROCESSLIST в команде MySQL: sleep
Когда я запускаю 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? Это замедляет работу базы данных, и когда я убиваю процесс, он работает нормально. Пожалуйста, помогите мне.
Ответы
Ответ 1
Это не запрос, ожидающий соединения; это указатель соединения, ожидающий истечения времени ожидания.
Это не влияет на производительность. Единственное, что он использует, это несколько байтов, как и каждое соединение.
Действительно худший случай: он использует одно подключение вашего пула; Если вы будете подключаться несколько раз через консольный клиент и просто закроете клиент, не закрывая соединение, вы можете использовать все свои соединения и подождать, пока тайм-аут не сможет подключиться снова... но это маловероятно :-)
См. MySql Proccesslist, заполненный записями "Sleep", приводящими к "Too many Connections"? и https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep для получения дополнительной информации.
Ответ 2
Соединения состояния "Сон" чаще всего создаются кодом, который поддерживает постоянные подключения к базе данных.
Это может включать в себя пулы соединений, созданные инфраструктурами приложений, или инструменты администрирования базы данных на стороне клиента.
Как уже упоминалось выше, в комментариях нет причин беспокоиться об этих связях... если, конечно, вы не знаете, откуда происходит соединение.
(CAVEAT: если у вас был длинный список таких соединений, может возникнуть опасность истечения одновременных подключений.)
Ответ 3
Сон означает, что нить ничего не делает.
Время слишком велико, потому что он не является отключенным сервером,
default wait_timeout = 28800, поэтому вы можете установить значения меньше, например, 10.
также вы можете убить поток.
Ответ 4
Я нашел этот ответ здесь: https://dba.stackexchange.com/info/1558. Короче говоря, использование следующего (или в my.cnf) устранит проблему тайм-аута.
SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;
Это позволяет завершать соединения, если они остаются в спящем состоянии в течение 3 минут (или как вы определяете).