RDS Multi-AZ 瓶颈写入性能
RDS Multi-AZ bottlenecking write performance
我们在 sa-east-1 区域使用 RDS MySQL 5.6 实例 (db.m3.2xlarge),在写入密集型操作期间,我们看到(在 CloudWatch 上)我们的写入吞吐量和网络传输吞吐量上限为 60MB/s。
我们怀疑多可用区可能是造成此行为的原因,出于测试目的将其关闭。我们进行了相同的操作,现在注意到写入吞吐量不再受限,网络传输吞吐量实际上为零。这强化了这种网络流量位于多可用区设置中的主实例和故障转移实例之间的想法。
这是 Cloudwatch 图表,显示了没有多可用区的操作和启用多可用区后的相同操作:
我们尝试将实例升级到具有最高网络性能的实例并配置了 IOP,但没有任何变化,当多可用区打开时,我们的写入速度始终上限为 60MB/s。
据我们了解,多可用区使用同步数据复制,但我们找不到任何有关发生此复制的 link 带宽限制的信息。有谁知道这件事以及如何避免这个限制?还是我们应该忍受它?
我认为您没有看到复制服务本身的限制,但您的复制带宽似乎与您的 EBS 卷共享相同的传输实例,因此它限制了实例本身可用的以太网带宽(记住 EBS 是网络附加存储)。
m3.2xlarge 上的网络连接数为 1000 Mbit/s,相当于 125 MiB/s。
将该数字除以二,您将获得 ~60 MB/s 用于写入本地实例的 EBS 卷,另外 ~60 MB/s 用于写入同步副本。
不幸的是,多可用区复制的实施细节并不是 AWS 公开解释的足够详细的内容,因此无法得出结论说这确实是解释,但如果它是正确的,这些数字与预测的数字可疑地接近.
m3 系列和 m4 系列实例具有相似的规格,但(显然)也存在一些基本的设计差异,因此查看 m4.2xlarge 是否具有相同的行为可能会提供信息。
我遇到了同样的问题,激活多可用区后写入延迟急剧增加:
(实例类型为m4.4xlarge)
原因貌似是synchronous同步过程,每次写操作都要等到两个DB都对修改做出积极响应。
看起来没有解决方案,这是预期的行为:
DB instances using Multi-AZ deployments may have increased write and
commit latency compared to a Single-AZ deployment, due to the
synchronous data replication that occurs
这是一个与此相关的有趣的 Redis 线程:
我看到的唯一建议是 移动到 Aurora :/
好吧,我从来没有从任何地方得到实际的解释,但经过大量测试后,m3.2x.large 似乎实际上是 "bugged"。我在我的blog.
里写了详细的解释
我们在 sa-east-1 区域使用 RDS MySQL 5.6 实例 (db.m3.2xlarge),在写入密集型操作期间,我们看到(在 CloudWatch 上)我们的写入吞吐量和网络传输吞吐量上限为 60MB/s。
我们怀疑多可用区可能是造成此行为的原因,出于测试目的将其关闭。我们进行了相同的操作,现在注意到写入吞吐量不再受限,网络传输吞吐量实际上为零。这强化了这种网络流量位于多可用区设置中的主实例和故障转移实例之间的想法。
这是 Cloudwatch 图表,显示了没有多可用区的操作和启用多可用区后的相同操作:
我们尝试将实例升级到具有最高网络性能的实例并配置了 IOP,但没有任何变化,当多可用区打开时,我们的写入速度始终上限为 60MB/s。
据我们了解,多可用区使用同步数据复制,但我们找不到任何有关发生此复制的 link 带宽限制的信息。有谁知道这件事以及如何避免这个限制?还是我们应该忍受它?
我认为您没有看到复制服务本身的限制,但您的复制带宽似乎与您的 EBS 卷共享相同的传输实例,因此它限制了实例本身可用的以太网带宽(记住 EBS 是网络附加存储)。
m3.2xlarge 上的网络连接数为 1000 Mbit/s,相当于 125 MiB/s。
将该数字除以二,您将获得 ~60 MB/s 用于写入本地实例的 EBS 卷,另外 ~60 MB/s 用于写入同步副本。
不幸的是,多可用区复制的实施细节并不是 AWS 公开解释的足够详细的内容,因此无法得出结论说这确实是解释,但如果它是正确的,这些数字与预测的数字可疑地接近.
m3 系列和 m4 系列实例具有相似的规格,但(显然)也存在一些基本的设计差异,因此查看 m4.2xlarge 是否具有相同的行为可能会提供信息。
我遇到了同样的问题,激活多可用区后写入延迟急剧增加:
(实例类型为m4.4xlarge)
原因貌似是synchronous同步过程,每次写操作都要等到两个DB都对修改做出积极响应。
看起来没有解决方案,这是预期的行为:
DB instances using Multi-AZ deployments may have increased write and commit latency compared to a Single-AZ deployment, due to the synchronous data replication that occurs
这是一个与此相关的有趣的 Redis 线程:
我看到的唯一建议是 移动到 Aurora :/
好吧,我从来没有从任何地方得到实际的解释,但经过大量测试后,m3.2x.large 似乎实际上是 "bugged"。我在我的blog.
里写了详细的解释