У нас есть вики-сайт MediaWiki по базе данных MySQL. Однако другие приложения также обращаются к MySQL. В настоящее время у нас есть максимум 100 подключений к базе данных, из которых MediaWiki разрешено 10.
Однако в часы пик более 10 пользователей одновременно пытаются получить доступ к вики, что означает, что они могут получить ошибку подключения к MySQL.
В частности, в сообщении говорится:
"имя базы данных" имеет проблему
Сожалею! Этот сайт испытывает технические трудности.
Попробуйте подождать несколько минут и перезагрузить.
(Невозможно связаться с сервером базы данных: неизвестная ошибка ("имя базы данных mysql"))
Моя мысль ограничить в MediaWiki (например, в LocalSettings.php) количество подключений, пытающихся получить доступ к базе данных. Тогда люди не получат сообщение об ошибке - им просто придется подождать дольше.
Есть ли способ сделать это? Или есть решение получше?
Внутри приложения вам нужно будет делать именно то, что вы хотите, да.
Я возьму момент, чтобы порекомендовать против этого, во-первых: похоже, что сайт получает достаточно использования, что ему нужно больше подключений к базе данных, и этот тип вещей, возможно, действительно не может помочь в целом. (Я могу только предположить, например, что MediaWiki не написана таким образом, что без необходимости использует дополнительные соединения, чем это необходимо)
Моя основная мысль здесь - если это вообще возможно, попытаться дать сайту то, что ему нужно для работы. Если это вызовет проблемы с общим сервером MySQL, возможно, это узкое место необходимо устранить. Будь то Подождите или ошибка, отказ подключиться к базе данных приведет к оттоку определенного количества пользователей с сайта и, как правило, создает для них негативные впечатления.
«Простым» решением было бы изменить сообщение об ошибке на более понятное, но это может не решить проблемы.
Предполагая, что вы не можете поднять лимит в 10 подключений, приложение может нуждаться в изменении (и, возможно, довольно обширно), чтобы каждая попытка подключения к базе данных заключалась в код, который улавливает сбои при подключении, ждет заранее заданное время и пытается снова определенное количество раз.
Вам может повезти, и в MediaWiki может быть такая функциональность, которую можно настроить. Кто-то более знакомый может помочь с этим, если так. Другой (более вероятный) случай удачи будет заключаться в том, что код доступа к БД очень плотно ограничен, и поэтому это решение не будет связано с изменением 300+ мест в коде для этого (трудоемкая и отягчающая перспектива , мягко говоря).
Я бы порекомендовал такое решение только в том случае, если эти ошибки возникают очень редко. Если это обычное явление, это может просто привести сайт к сканированию, где он постоянно ждет / повторяет попытки подключения к БД ... и все равно в конечном итоге в конечном итоге возвращает ошибку.