Я заметил, что, хотя и достаточно быстро, соединение с базой данных (облачный SQL-тумблер Google mysql-совместимый) является большой частью запроса. Я использую PDO для абстракции.Как вы работаете с постоянными соединениями PDO с облачным SQL-сервером Google?
Итак, поскольку в этом случае очевидным решением является включение PHP's PDO persistent connections.
В моем понимании, и я проверил это в исходном коде РНР (ссылки пыльника), способ их работа выглядит следующим образом:
- при подключении с персистирующим флагом на, PHP caches the connection с использованием хэша строки подключения, имени пользователя и пароля для ключа
- при попытке повторно подключиться в другом запросе checks if a persistent connection exists, то checks the liveness of the connection (что конкретно связано с драйвером; mysql version is what is executed в моем случае) и убивает кешированную версию, если он не прошел тест
- если в кэшированном варианте on был убит, новая связь создана и возвращена; в противном случае вы можете пропустить накладные расходы на создание соединения (примерно в 30 раз быстрее процесс создания на основе профилей xdebug, выполняемых непосредственно в версиях версии в облаке)
Все звучит хорошо до сих пор? Не уверен, как все это работает, когда вы говорите, что у вас есть кешированные соединения, и два запроса ударил его (стресс-тестирование, похоже, не вызывает проблем), но в остальном звучит okey и при тестировании работает нормально.
Ну, вот что происходит в реальном мире через некоторое время проходит ...
После того, как соединение «умирает» PDO будет простаивать весь запрос на 60-й или более. Это происходит, я верю, возможно, через 1 час или более; поэтому в течение короткого времени все будет работать нормально, а PDO будет подключаться супер быстро к Cloud SQL. Я пробовал несколько способов, чтобы, по крайней мере, уменьшить старение, превышающее 1 с, но без результата (ini_set тайм-аут сокета не влияет на него, истекает флаг на PDO, игнорируется. Я считаю, исключения и проверки состояния для «ушли» бесполезны так как он останавливается при подключении и т. д.). Я предполагаю, что, скорее всего, связь «истекает», но причины мне неизвестны. Я предполагаю, что Cloud SQL сбрасывает его с тех пор, как он не находится в «show processlist», но, возможно, я не смотрю на него правильно.
Есть ли какой-либо секретный соус, который заставляет постоянные соединения PDO работать с Cloud SQL более чем на короткое время?
Поддерживаются ли постоянные подключения к Cloud SQL?
Где работает приложение PHP? AppEngine? Вычислить двигатель? В другом месте? – Vadim
может быть ошибкой или чем-то, что они на самом деле не думали о добавлении, избранный вопрос - любознательный сам, чтобы услышать ответ. проголосовали вверх! – KDOT
Я запускаю приложение в контейнере, кубернете. Разумеется, это вычислительный движок. – srcspider