如何提高 AWS RDS 性能 - 大量读写更新

如何提高 AWS RDS 性能 - 大量读写更新

在搜索并阅读了尽可能多的帖子、评论和讨论后,我没有找到一个专门针对我的问题的帖子。

我在同一个交付区域 us-west-2(c) 中有多个 AWS EC2 部署,且只有一个 RDS

我正在测试实例的负载,其负载只是我很快会预期的一小部分。令我担心的问题是推送更新时的性能。我们将频繁地一次获取 1,000 条记录的更新,并将获取和比较我们的数据并根据需要更新我们的数据。因此,每个条目一次读取和一次写入。一小时内收到 100,000 条更新并不罕见。

目前,我在 AWS t2.medium 级 RDS 上有一个 MySQL 数据库,正在运行 5 个更新进程,CPU 使用率为 22%,内存不到 1GB。

即使这些数字很低,搜索 106.3K 条记录的数据库的读取时间也需要整整 2 到 3 秒,写入时间又需要 2 秒。

我需要一些关于如何改善这些读/写时间的想法。

附加信息:我也在运行一个副本实例。CMS 驱动的网站(100 个,并且每天都在增加)连接到副本实例以获取其内容。

谢谢!

答案1

我将把上述评论转化为答案。

T2 实例仅获得CPU 的一部分- t2.micro 为 10%,t2.medium 为 40%。您可以获得累积的 CPU 积分,但一旦使用它们,您的 CPU 就会受到限制。由于您必须共享物理机器资源,因此您的网络和 IO 性能也会降低。

我怀疑发生的情况是你的测试已经用完了 CPU 积分,所以你被限制了。你可以监控 CPU 积分在 CloudWatch 中,这将告诉您我的猜测是否正确。

无论我是否正确,t2 实例都不适合需要不断进行工作的系统。C4 或其他通用实例可能是您的最佳选择。您可以在 CloudWatch 中监控数据库内存和 CPU 使用情况,以帮助确定所需的数据库实例大小。

答案2

注意磁盘瓶颈:磁盘 IOPS。如果未配置,RDS 将限制 IO 请求。SSD 的 IOPS 为 3 IOPS/GB。因此,如果您为 SSD 分配了 100GB,则最多可以使用 3x100 = 300 IOPS 块。
如果您为配置的 SSD 付费,则可以配置更多的 IOPS。

而对于标准(磁性)存储,每百万 iops 额外收费,突发为 40-200 iops。

请检查您的 RDS io 日志上的活动以确定更好的磁盘 io 策略。更多信息参考:https://stackoverflow.com/questions/18777070/aws-rds-provisioned-iops-really-worth-it

答案3

我最终创建了一个 c4.xlarge EC2,并将其作为我的 MariaDB 10 服务器运行。由于目前流量很大,而且新营销活动带来的流量大幅增加,我不能依赖 RDS,除非每月花费数百美元。我发现许多关于 AWS RDS 的投诉与我的问题类似。

现在系统能够同时维护两个更新工作者,而访问者能够获取动态内容而不会降低性能。

感谢大家的想法和评论!

  • 史蒂文

相关内容