AWS RDS PostgreSQL:PostgreSQL 复制延迟的承诺价值是多少?

Posted

技术标签:

【中文标题】AWS RDS PostgreSQL:PostgreSQL 复制延迟的承诺价值是多少?【英文标题】:AWS RDS PostgreSQL: what's the promised value for PostgreSQL replication lag? 【发布时间】: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_delayhot 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 的复制延迟的承诺估计值是多少?

【问题讨论】:

【参考方案1】:

根据 RDS 文档中的Read replica limitations with PostgreSQL:

如果源数据库实例上没有发生任何用户事务,则 PostgreSQL 只读副本会报告最多五分钟的复制延迟。

当有一个每隔几毫秒写入数据库的脚本时,你能检查复制延迟吗?推荐in this answer?

【讨论】:

以上是关于AWS RDS PostgreSQL:PostgreSQL 复制延迟的承诺价值是多少?的主要内容,如果未能解决你的问题,请参考以下文章

AWS RDS PostgreSQL:PostgreSQL 复制延迟的承诺价值是多少?

将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS

如何配置从 Vanilla Postgresql 9.6 DB 到 AWS RDS Postgresql 的流复制

AWS ElasticBeanstalk EC2 到 RDS postgresql 连接

出于开发目的,无法从本地主机连接到 AWS RDS Postgresql

Django/PostgreSQL 全文搜索 - 在 AWS RDS PostgreSQL 上使用 SearchVector 与 SearchVectorField 时的不同搜索结果