Во время работы веб-сайта в списке процессов mysql я вижу несколько процессов, в столбце «команда» которых указано «SLEEP».
Я должен волноваться? Как это остановить?
Даже самым могущественным из нас иногда нужно спать. Без сна человек становится беспокойным, а бессонница может привести к всевозможным серьезным симптомам.
Более серьезно: состояние сна означает, что процесс MySQL выполнил свой запрос, но клиентская часть еще не завершилась. Многие веб-приложения впоследствии не очищают свои соединения, что приводит к спящему процессу MySQL. Не волнуйтесь, если их всего несколько; MySQL очистит их после настраиваемого периода ожидания (wait_timeout).
Или, если ваше веб-приложение использует постоянные соединения и пулы соединений, то совершенно нормально иметь даже много спящих процессов: в этом случае ваше приложение просто открывает, например, 100 соединений SQL и сохраняет их открытыми. Это снижает накладные расходы на открытие / закрытие соединения. Если ваше приложение не очень загружено, это нормально, что не почти каждому процессу SQL есть чем заняться, поэтому они спят.
Нет, не беспокойтесь о них, если у вас их не тысячи. Обычно они указывают на соединение с базой данных, которое в данный момент ничего не делает, но в остальном все еще живо.
Многие веб-сайты построены таким образом, что в начале обработки страницы открывается соединение с базой данных, затем используется на протяжении всего процесса создания страницы и, наконец, удаляется в конце. Если отбрасывание выполнено правильно, соединение с базой данных закрывается, а затем сервер убивает соответствующий поток, что означает, что это соединение исчезает из списка процессов.
Если соединение не закрыто, оно может оставаться в состоянии «SLEEP» до истечения времени ожидания. В этом случае у вас может быть много спящих процессов. но если вы не столкнетесь с проблемами памяти на сервере db, это тоже не большая проблема.
Перед увеличением переменной max_connections вы должны проверить, сколько у вас неинтерактивных подключений, выполнив команду show processlist.
Если у вас много спящих подключений, вам нужно уменьшить значение переменной «wait_timeout», чтобы закрыть неинтерактивное подключение после ожидания несколько раз.
SHOW SESSION VARIABLES LIKE 'wait_timeout'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 28800 | +---------------+-------+
значение указано в секундах, это означает, что неинтерактивное соединение все еще до 8 часов.
SET session wait_timeout=600; Query OK, 0 rows affected (0.00 sec)
Через 10 минут, если спящее соединение все еще спит, mysql или MariaDB разорвут это соединение.