У меня 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