【发布时间】: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