Мой основной вопрос: какое влияние это окажет на сервер?
Скажем, например, в моей компании есть более старая программа, которая открывает соединения с сервером базы данных mysql с высокой скоростью (все, что они делают с приложением, в основном открывает соединения с сервером). Однако это приложение не предназначалось для удаления соединений после их создания. Большую часть времени соединения остаются открытыми, но никогда не используются снова, я думаю, можно сказать, открывают «мертвые» соединения.
Они просто остаются подключенными до тех пор, пока сервер не истечет их тайм-аут или пока администратор не войдет и не удалит спящие подключения вручную. Я предполагаю, что это может быть причиной иногда ошибок подключения и т.д., которые мы получаем от других систем, которые пытаются получить доступ к базе данных mysql? (достигнут лимит подключений)
Может ли это замедлить работу сервера? Любопытно, к чему все это могло привести.
Вы можете поиграть в некоторые игры со значениями тайм-аута в MySQL.
Например, значение по умолчанию для 'wait_timeout
' и 'interactive_timeout
'составляет 28800 (это 8 часов)
Вы можете увидеть, на что они настроены, запустив это:
SHOW VARIABLES LIKE 'interactive_timeout';<BR>
SHOW VARIABLES LIKE 'wait_timeout';
Если вы хотите уменьшить их, скажем, до 1 минуты, перезапуск MySQL не требуется.
Запустите их от имени пользователя root:
SET GLOBAL interactive_timeout=60;<BR>
SET GLOBAL wait_timeout=60;
Это гарантирует, что любые новые соединения MySQL будут отключены через 60 секунд.
затем добавьте эти строки в /etc/my.cnf
в разделе [mysqld]
interactive_timeout=60
wait_timeout=60
Конечно, проще перезапустить mysql, чтобы удалить оставшиеся спящие соединения. Все соединения, идущие оттуда, будут отключены через 60 секунд.
Попробуйте и дайте нам знать !!!
Если вы не работаете на действительно ограниченном сервере, это вряд ли что-нибудь замедлит. Приложение, выполняющее это, будет медленно утечка памяти, хотя до тех пор, пока не будет достигнуто максимальное количество подключений, но я сомневаюсь, что это будет столько памяти.
Основная проблема, с которой вы, вероятно, столкнетесь, - это проблема, которую вы уже заметили, - максимальное количество подключений. Лучший вариант - исправить программу, чтобы она убирала за собой. Если по какой-то причине это действительно не вариант, вы можете установить ограничение на количество подключений из окна, в котором запущено это приложение, чтобы этот ящик не мог открывать более X подключений к серверу mysql, чтобы он не мог его монополизировать (я не знаю какую ОС вы используете, чтобы узнать, возможно ли это, но если это Linux, это будет простое правило iptables).
да, interactive_timeout и wait_timeout. Пока поток очистки в mysql продолжает работать, он сам очищает их
Это не вызывает проблем, пока у вас не закончатся соединения и законные клиенты не смогут подключиться.
Конечно, вам нужно установить max_connections достаточно низким, чтобы у вас не закончилась память или адресное пространство (MySQL использует один поток на соединение). Вы не должны запускать mysql в 32-битной системе, но если вы это сделаете, это означает, что вам нужно (практически) иметь max_connections <1000.
Если серверу приложений не удается закрыть соединения, вероятно, на его стороне тоже происходит утечка ресурсов. Тайм-аут сервера решит проблему на стороне mysql, но, вероятно, не освободит память (и т. Д.) На другом конце. Неисправный сервер приложений в конечном итоге выйдет из строя, если его не отметить. Это действительно нужно исправить.
Кроме того, будьте очень осторожны при установке низкого тайм-аута, некоторые приложения ожидают, что соединения не истекут. По умолчанию установлено 8 часов, поэтому изменение его на 1 минуту кажется очень радикальным.