Нет проблем с базой данных, проблема в том, как вы обрабатываете подключения к базе данных из своего программного обеспечения.
Способ, которым настроен ваш скрипт, заключается в том, что каждое подключение к вашему веб-серверу также открывает соединение с MySQL. Это не тот сценарий, который вы хотите.
Повышение лимита не решит проблему, это просто задержит еще одну ошибку. Вам следует использовать постоянные соединения.
Одна из причин, почему использование php-fpm
вместо серверных API, таких как mod_php
, является предпочтительным, потому что загружено определенное количество процессов PHP и создается пул соединений с сервисами.
Поток будет следующим:
- использования
php-fpm
. Apache
и nginx
могут использовать интерфейс FCGI для связи с php-fpm
процессов
- Поднять относительно небольшое количество дочерних процессов для
php-fpm
. Это не должно быть слишком большим, по умолчанию конфигурации обычно работает, я сделаю предположение, что вы не запускать систему шестиядерный так 4-6 дочерние процессы должны быть хорошо
- использовать постоянные соединения MySQL
Что это делает? Ваш сервер принимает запрос и отправляет его в php-fpm
, который обрабатывает его, когда он становится бесплатным. Каждый процесс использует 1 соединение с MySQL. Это означает, что вы никогда не сможете попасть в какой-то жесткий предел, как у вас.
Если ваш сервер занят, сервер должен поставить в очередь запросы до тех пор, пока PHP не сможет их обработать. Будь то Apache
или nginx
, который вы используете, этот подход будет работать хорошо.
Если ваш сайт занят, скорее всего, веб-сервер работает быстрее, чтобы принимать подключения и обслуживать статический контент, который PHP должен обрабатывать динамическим контентом. В этом случае у вас есть возможность добавить другую физическую машину (или более), которая запускает php-fpm
. Поручить ваш веб-сервер объединиться между машинами, которые обслуживают PHP, тривиально для обоих указанных веб-серверов.
Суть заключается в том, что вы хотите оптимально использовать свои ресурсы. Открытие и закрытие соединений MySQL по каждому запросу не является оптимальным. Объединение соединений.
Вам необходимо предоставить дополнительную информацию о программном обеспечении и о том, как эта ошибка была сгенерирована. Вы также должны описать, что вы пробовали, что вы используете (MySQL? PostgreSQL? Oracle? MSSQL?) Это определенно звучит как проблема с db. –
Мы используем Mysqli, написанный скриптом PHP. Ошибка появляется, когда количество пользователей превышает количество веб-сайтов. Пользователи приходят на сайт, чтобы нажимать на объявления. –
Это может быть ваш скрипт, который не закрывает соединение должным образом. Сколько одновременных соединений вы обычно используете на сайте? – spencdev