Сегодня сайт снова заблокировался, и обнаружено большое количество сна
Причины сна:
1 Клиентская программа не вызывала mysql_close() перед выходом.
2 Клиент спал более wait_timeout или interactive_timeout секунд, не отправляя никаких запросов к серверу.
3 Клиентская программа внезапно завершилась посреди передачи данных
Если количество процессов сна за один период слишком велико, а общее число соединений в других состояниях превышает значение max_connection, MySQL больше не может обрабатывать запросы, кроме корневого пользователя, не может установить соединение с запросом или зависает напрямую
Решение:
1. Во-первых, проверьте, использует ли ваша программа метод pconnect, а во-вторых, проверьте, вызывается ли mysql_close() во времени до выполнения страницы. Старайтесь не использовать метод pconnect, то есть используйте mysql_connect. Когда программа выполняется, mysql_close должен быть явно вызван
2. Добавьте wait_timeout и interactive_timeout в my.cnf, уменьшите значение, по умолчанию wait_timeout — 8 часов, можно изменить на 1 час или полчаса. Таким образом, mySQL быстрее уничтожит мёртвые соединения. Не допустить, чтобы общее количество соединений превысило значение max_connection.
wait_timeout слишком большой размер приведёт к своевременному выпуску большого количества SLEEP процессов в MySQL, что снижает производительность системы, но если настройки слишком малы, могут возникнуть такие проблемы, как «MySQL исчез».
Установите значение max_connection на более высокое, но это явно неуместно — чем больше у вас соединений, тем больше нагрузки это создаёт на сервере. На самом деле, эти связи избыточны, и прекратить их как можно скорее — лучшая политика.
3. Пошагово проанализируйте SQL-запросы системы, найдите слишком медленный SQL и оптимизируйте его
1)interactive_timeout: Значение параметра: количество секунд, в течение которых сервер ждёт активности перед отключением интерактивного соединения. Интерактивный клиент определяется как клиент, использующий CLIENT_INTERACTIVE опцию в mysql_real_connect(). Параметр по умолчанию: 28800 секунд (8 часов)
(2)wait_timeout: Значение параметра: количество секунд, в течение которых сервер ждёт активности перед закрытием неинтерактивного соединения. При начале потока значение сессионного wait_timeout инициализируется на основе глобального wait_timeout или глобального interactive_timeout значения, в зависимости от типа клиента (определяемого CLIENT_INTERACTIVE вариантах соединения mysql_real_connect()). Параметр по умолчанию: 28800 секунд (8 часов)
Существует верхний предел максимального количества соединений, которые может поддерживать MySQL Server, так как каждое соединение устанавливается и потребляет память, поэтому мы ожидаем, что клиенты будут отключаться и освобождать занятую память после подключения к MySQL Server для выполнения соответствующей операции. Если на вашем MySQL Server много простоящих соединений, они не только будут тратить память, но и если соединения продолжают накапливаться и открываться, то в MySQL Server достигнут максимального количества соединений, что сообщает об ошибке «слишком много соединений». Установка стоимости wait_timeout следует оценивать в зависимости от работы системы. После того как система работает некоторое время, вы можете проверить статус соединения текущей системы с помощью команды показать список процессов; если вы обнаружите большое количество связанных процессов в состоянии сна, это значит, что параметры слишком велики, и вы можете внести соответствующие корректировки для мелких корректировок.
SQL-команда:
Этот метод модификации заключается вПосле перезапуска сервиса mysql он станет недействительным, поэтому лучше всего настроить эти два свойства в конфигурационном файле MySQL.
Измените файл my.cnf в Linux:
|