MySQL и MariaDB LinuxMySQL 8.0/8.4Percona Server 8.0/8.4 1040

MySQL: Too many connections при неизменном трафике

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Однократное увеличение max_connections не исправляет утечку: больше подключений означает больше потенциально занятой памяти. Начните с безопасных измерений и только потом правьте настройки приложения.

В этой статье
  1. Что означает неисправность и в каких условиях возникает
  2. Возможные причины: как различить
  3. Пошаговая диагностика и устранение
  4. Как проверить исправление и что делать, если оно не помогло

#Что означает неисправность и в каких условиях возникает

Сайт внезапно получает ERROR 1040 (HY000): Too many connections, хотя число посетителей почти не изменилось. Для MySQL/Percona 8.x сначала нужно выяснить, накопились ли неосвобождённые соединения, выросла ли длительность запросов или кто-то изменил лимиты. Однократное увеличение max_connections не исправляет утечку: больше подключений означает больше потенциально занятой памяти. Начните с безопасных измерений и только потом правьте настройки приложения.

#Возможные причины: как различить

Возможная причинаКак узнатьЧто делать
Зависшие соединения SleepПриложение открывает соединения и не возвращает их в пул либо держит транзакции открытыми.Threads_connected растёт; в списке процессов много Sleep от одной программы.Найти владелец подключения и исправить время жизни соединения.
Долгие запросы или блокировкиНагрузка по числу запросов прежняя, но время каждого выросло.В SHOW FULL PROCESSLIST есть долгие Query, Locked или ожидания.Проверить блокировку, запрос и индекс, не повышая лимит вслепую.
Изменение лимита или фоновых клиентовПосле релиза поменялись настройки пула либо появился резервный агент/задание.Max_used_connections близко к max_connections; есть новые User/Host.Сопоставить время релиза, фоновые службы и лимиты.

#Пошаговая диагностика и устранение

  1. Подтвердите точную ошибку и времяОткройте журнал веб-приложения, найдите полную строку ERROR 1040 и отметьте время. Ошибки 2002, 2006 и 1045 имеют другие причины; без 1040 не меняйте max_connections. Определите, к какому серверу база подключается: к локальному сокету или по сети, и какой экземпляр MySQL используется.
  2. Откройте клиент MySQL безопасным способомНа сервере подключитесь через SSH под учётной записью администратора. Для доступного административного входа введите sudo mysql (Debian с настроенным socket-входом) либо mysql -u имя_администратора -p; -p запросит пароль без показа. Если оба варианта не работают, запросите у администратора доступ только на просмотр, не запускайте восстановление пароля и не останавливайте сервер.
  3. Сравните лимит и фактическое число соединенийВ консоли с приглашением mysql> введите SHOW VARIABLES LIKE 'max_connections'; затем SHOW GLOBAL STATUS WHERE Variable_name IN ('Threads_connected','Threads_running','Max_used_connections','Connection_errors_max_connections');. Threads_connected — текущее число соединений, Max_used_connections — максимум с запуска, а не текущий уровень. Сохраните результаты с меткой времени, повторите в пик.
  4. Определите источники соединенийВ MySQL выполните SHOW FULL PROCESSLIST;. Просмотрите столбцы User, Host, Command, Time, State и Info; сравните количество соединений веб-сайта и фонового обработчика. Команда показывает не все чужие потоки без PROCESS. Если отчёт пустой для чужих подключений, попросите администратора с полномочиями PROCESS провести проверку, а не выдавайте дополнительные права сайту.
  5. Отличите спящие соединения от медленных запросовЕсли у одного User много долгоживущих Sleep, проверьте в настройках приложения размер пула, постоянные подключения и закрытие транзакций после завершения запроса. Если преобладают Query, зафиксируйте текст и время выполнения, посмотрите EXPLAIN на копии или вне пика. Не выполняйте массовый KILL: это может откатить рабочие операции.
  6. Проверьте изменения в момент ростаСравните время появления 1040 с развертыванием новой версии, запуском резервного копирования, задачами по расписанию и сменой конфигурации PHP-FPM. Например, рост pm.max_children способен увеличить верхнюю границу одновременных подключений даже при прежнем числе посетителей. Проверьте журнал развёртывания и настройки пулов; откатите подозрительное изменение приложения через обычную процедуру развёртывания.
  7. Исправьте первопричину в приложенииРазработчику следует закрывать курсоры и транзакции, освобождать соединение в блоке finally и установить ограниченный размер пула, соответствующий параллельным запросам. Проверьте исправление на испытательном экземпляре тем же набором запросов. Если подключений становится меньше и число ошибок падает, разворачивайте исправление в малой группе с наблюдением за временем ответа.
  8. Повышайте лимит только после расчёта памятиЕсли утечек нет, а измеренная максимальная потребность выросла по допустимой причине, согласуйте новый max_connections с администратором БД после оценки памяти на соединение и серверных лимитов. Сначала зафиксируйте прежнее значение и способ отката; на загруженном сервере не задавайте большое число только ради исчезновения ошибки, поскольку это может привести к нехватке ОЗУ.
  9. Дополнительная команда по теме
    SQLКоманда
    SQL-команды вводят внутри mysql> с правом просмотра; PROCESS нужен для просмотра всех чужих потоков.
    SHOW VARIABLES LIKE 'max_connections';
    SHOW GLOBAL STATUS WHERE Variable_name IN ('Threads_connected','Threads_running','Max_used_connections','Connection_errors_max_connections');
    SHOW FULL PROCESSLIST;

#Как проверить исправление и что делать, если оно не помогло

В очередной пик зафиксируйте значение Threads_connected, отсутствие новых ERROR 1040 и продолжительность запросов. Если при стабильной нагрузке соединения снова накапливаются, снимите несколько последовательных списков процессов и обратитесь к разработчику; изменение max_connections верните к прежнему значению после тестов, если роста соединений не требовалось.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.