【发布时间】:2021-04-03 08:54:29
【问题描述】:
我有一个包含四个副本的主 RDS 实例。
-
主数据库:Postgres,4 个 vCPU,16GB RAM,us-west-2a
-
Replica1:Postgres,4 个 vCPU,16GB RAM,us-west-2a,200G SSD(否 流量,仅供测试)
-
Replica2:Postgres,4 个 vCPU,16GB RAM,us-west-2b,200G SSD(无 流量,仅供测试)
-
Replica3:Postgres,2 个 vCPU,8GB RAM,us-west-2b,200G SSD(小 交通)
-
Replica4:Postgres,2 个 vCPU,8GB RAM,us-west-2b,200G SSD(小 交通)
主副本和只读副本之间的延迟超过 16 秒,没有任何高 IOPS,有时是 30 秒。
我花了很多精力来挖掘延迟的根本原因。
这是没有任何流量的副本的 CloudWatch 报告。
假设一:是IO信用造成的吗?
这是 IO 信用报告,过去 6 小时总是 100%,我认为不是 IO 问题造成的。
即使我认为不是 IO 造成的,我还是决定将数据库的磁盘从 GP2 升级到 IO1,并提供 3000 IOPS。
但它不起作用,滞后仍然存在。
假设二:是不是参数热备造成的?
replicas 中没有流量!与postgresql参数max_standby_streaming_delay和hot standby无关
假设三:是网络IO造成的吗?
流量始终小于1M/s
假设四:它是由我的应用程序中触发的长时间运行的查询引起的吗?
我创建了两个全新的 m5.large PostgreSQL 实例来验证这个假设,并使用 pgbench 进行基准测试。
-
主要:M5.large,预置 IOPS 为 3000。
-
副本:M5.xlarge,预置 IOPS 为 1000。
我很惊讶!延迟从 0 到 24 秒不等。
您可能会问为什么不将此问题发布到 aws?
我已经问过this question in aws forum,但没有人回答我。
我觉得被骗了,想从你的经验中了解复制滞后的真正价值。
问题
AWS Amazon Aurora 提供延迟的估计值 (under 100ms)。这是我的基准报告,延迟低于 25 毫秒。
对于 AWS RDS PostgreSQL:
-
谁能告诉我在野外 aws RDS PostgreSQL 复制延迟的正常值是多少?
-
AWS RDS PostgreSQL 的复制延迟的承诺估计值是多少?
【问题讨论】:
标签: postgresql amazon-web-services amazon-rds