Постоянное соединение php mysqli не используется в App Engine - PullRequest
0 голосов
/ 19 октября 2018

У нас есть приложение, написанное на 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 активными подключениями за раз.

Мой вопрос: мы что-то упускаем при реализации постоянных подключений?Почему это не работает так, как мы ожидали?Заранее спасибо!

1 Ответ

0 голосов
/ 20 октября 2018

Вы должны убедиться, что ваш connection.php является Singleton.Если нет, то при каждом подключении к БД будет создаваться новое подключение mysqli с параметрами, определенными в php.ini.

...