【问题标题】:PDO establishing connection to Azure PostgreSQL is very slowPDO 建立与 Azure PostgreSQL 的连接非常慢
【发布时间】:2018-09-16 11:11:55
【问题描述】:

我的 PHP 应用程序在 Kubernetes 中作为基于 Alpine Linux 的 Docker 容器运行。一切都很顺利,直到我尝试使用测试数据库删除容器并将其替换为Azure PostgreSQL。这导致延迟从 250 毫秒以下显着增加到 1500 毫秒以上。

根据分析器,大部分时间都花在PDO constructor 上,它正在建立与数据库的连接。 SQL 查询本身,在建立连接后,会在大约 20 毫秒内运行。

  • 我尝试使用 IP 代替地址,但仍然很慢。
  • 我尝试使用 psql 从容器连接,但速度很慢(请参阅下面的完整命令)
  • 我尝试使用bind-tools 进行DNS 解析,速度很快。
  • 数据库与 Kubernetes 节点在同一区域运行,甚至尝试了相同的资源组、不同的网络设置,但没有任何帮助。
  • 我尝试在客户端和服务器上要求/禁用 SSL 模式
  • 我尝试在已建立的连接中反复运行“选择 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

【问题讨论】:

  • 您是否尝试从 Kubernetes pod 连接到 postgres db?
  • 感谢您的建议。我试过了,它很慢(600ms+)
  • 你的 Kubernetes 集群在哪里?天蓝色?哪个地区?
  • 集群和数据库在同一个区域 West US 2. 数据库和节点在同一个资源组中。
  • 听起来你的 kubernetes 节点和 PostgreSQL 之间有一些速率限制。您可以向您的云提供商开具支持票以进行检查。

标签: php postgresql azure pdo kubernetes


【解决方案1】:

据我所知,这是由 PostgreSQL 之上的 Azure 特定身份验证引起的。不幸的是,Azure 支持无法提供帮助。

使用连接池(PgBouncer)可以解决这个问题。这是我们必须维护的另一部分基础设施(docker 文件、配置/秘密管理等),我们希望将其外包给云提供商。

【讨论】:

  • 感谢您的回答。由于 Azure 决定保护 pg 的方式,您是否有任何延迟来源?
  • 不,这是完全基于我的观察得出的结论。我可能完全错了。
猜你喜欢
  • 1970-01-01
  • 2013-11-10
  • 2016-07-07
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多