У нас есть приложение, написанное на php с использованием mysqli, работающее на Google App Engine и подключающееся к Google Cloud SQL.У нас есть файл connection.php, который создает экземпляр
$connection = new mysqli(...);
, и этот сценарий включен во все сценарии, необходимые для подключения к базе данных.
Мы получаемвсе больше и больше трафика, и мы начали видеть проблемы с очередями запросов, очень плохо вызывающими MySQL, исчезли ошибки.Мы поняли, что проблема была в том, что мы создавали новое активное соединение для каждого входящего запроса, что было сумасшедшим.Мы понимаем, что нам нужно использовать пул соединений, но в данный момент у нас нет времени, чтобы переписать все это.Поэтому мы хотим использовать постоянное соединение php mysqli до тех пор, пока не сможем переписать приложение в Java или что-то, что может использовать пул соединений.
Теоретически, при реализации постоянного соединения мы должны получать столько активных соединений в облакеSQL как экземпляры в App Engine (с документами, в которых говорится, что одно постоянное соединение совместно используется в одном процессе).Вот как использовать постоянное соединение:
$connection = new mysqli('p:localhost',...)
В нашем php.ini:
mysqli.allow_persistent = "1"
mysqli.max_persistent = "-1"
mysqli.max_links = "-1"
Однако мы видим, что каждый раз, когда приходит новый запрос, одно новое активное соединениедо сих пор создан в облаке SQL.Хуже того, эти соединения не закрыты, и запросы быстрее выстраиваются в очередь.Мы видим 8 экземпляров с 40 активными подключениями за раз.
Мой вопрос: мы что-то упускаем при реализации постоянных подключений?Почему это не работает так, как мы ожидали?Заранее спасибо!