PDO устанавливает соединение с Azure PostgreSQL очень медленно - PullRequest
0 голосов
/ 16 сентября 2018

У меня PHP-приложение, работающее как Docker-контейнер на основе Alpine Linux внутри Kubernetes.Все шло хорошо, пока я не попытался удалить контейнер с тестовой базой данных и заменить его Azure PostgreSQL .Это привело к значительному увеличению задержки с менее 250 мс до более 1500 мс.

Согласно профилировщику, большинство времени тратится на конструктор PDO , который устанавливает соединение с базой данных. Сами SQL-запросы после установления соединения выполняются примерно за 20 мс.

  • Я попытался использовать IP вместо адреса, и он все еще работал медленно.
  • Я попытался подключиться из контейнера с помощью psql, и это было медленно (см. Полную команду ниже)
  • Я попытался разрешить DNS с помощью bind-tools , и это было быстро.
  • База данных работает в том же регионе, что и узлы Kubernetes, пробовала даже одну и ту же группу ресурсов, другие настройки сети и ничего не помогло.
  • Я пытался потребовать / отключить режим SSL на клиенте и сервере
  • Я неоднократно пытался запустить «select 1» в уже установленном соединении, и это было быстро (в среднем 1,2 мс, медиана 0,9 мс) (см. Полный запрос ниже)

Что может вызвать такую ​​задержку?Как я могу дополнительно отладить / исследовать эту проблему?


Команда psql, используемая для попытки подключения:

psql "sslmode=disable host=host dbname=postgres user=user@host.postgres.database.azure.com password=password" -c "select 1"

Скорость запроса

\timing 
SELECT;
\watch 1

1 Ответ

0 голосов
/ 18 декабря 2018

Насколько я могу судить, это вызвано специфической аутентификацией Azure поверх PostgreSQL.К сожалению, поддержка Azure не смогла помочь с их стороны.

Использование пула соединений ( PgBouncer ) решает эту проблему.Это еще одна часть инфраструктуры, которую мы должны поддерживать (файл Docker, управление конфигурацией / секретностью и т. Д.), Которую мы надеялись передать стороннему поставщику облачных услуг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...