Задать вопрос
fast-je
@fast-je
Пишу на php.

Как исправить ошибку: Too many connections в MySQL?

На проекте в MySQL выскакивает ошибка иногда: Too many connections

Иногда я имею ввиду, думаю это происходит когда идет наплыв онлайна на сайте и кроны у меня которые каждую минуту выполняются, может в совокупности когда еще начинает выполнятся крон резкий скачок запросов и появляется ошибка.
Может пару раз за день такое, было max_connections 100, а потом поменял на 150 перезагрузил сервер и снова повалило куча ошибок, но когда уже дальше работать стал вроде одна вылезла и все, ну типа реже стало.

использую mysqli
создается всегда объект бд для работы, а так закрываю соединение.

public function __destruct()
{
    mysqli_close($this->link);
}


а при запросе соединения показывает практически постоянно 17-18
А вообще диапазон небольшой, 17 -25.

5dd44ce78320c927501890.png

Делаю еще так

Show processlist;

показывает эти 17 подключений, иногда больше и но большая часть из них спит.

Бд у меня около 500мб, на серваке 10гб озу, 8 ядер. Я думаю 150 коннектов для бд это много.
Хотя может и все ок.

Вообщем прошу направить, подсказать.

В чем может быть проблема ?
Может я вообще не так замеряю ? А если неправильно то как ?
  • Вопрос задан
  • 3275 просмотров
Подписаться 1 Средний Комментировать
Ответ пользователя FanatPHP К ответам на вопрос (3)
FanatPHP
@FanatPHP
Чебуратор тега РНР
Чаще всего причиной является либо говнокод, либо пконнект.

При переходе с mysql api на mysqli многие не учитывают, что каждое новое обращение к mysqli connect, в отличие от mysql connect, создает новое подключение. И таким обраом из одного и того же скрипта создается множество подключений.

Ну и обязательный карго культ - как только похапист узнает про pconnect, он тут же тащит его к себе в норку, и огребает те самые too many connections.

И это при том, что при 150 одновременных коннектах можно держать 50000 онлайн пользователей спокойно. Всего-то надо выкинуть пконнект, создавать соединение строго 1 раз и оптимизировать запросы.
Ответ написан