Подтвердить что ты не робот

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? Это замедляет работу базы данных, и когда я убиваю процесс, он работает нормально. Пожалуйста, помогите мне.

4b9b3361

Ответ 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 минут (или как вы определяете).