0

在我们的应用程序中,我们使用带有 Mysql 数据库的 EBS 分区。最终,我们用完了空间,不得不为数据库分配更大的分区。我们使用 AWS 面板功能使用前一个卷的快照创建一个新卷。Mysql 已停止,现在我们正在使用新的、更大的 EBS 分区。但是,我们的数据库性能明显下降。我们不确定这是怎么发生的,因为理论上我们使用的是相同的 Mysql 配置和相同的数据库。是否有可能我们必须重建索引或重新优化表?我不确定这是否值得,所以我们还没有尝试过,因为我们担心它会进一步减慢数据库的速度,而且我们的应用程序不能轻易停止,因为它 24/7 运行。有人可以帮忙吗?

4

1 回答 1

1

当您开始使用新的 EBS 卷(无论是从快照创建还是创建为空的)时,每个块始终存在首次使用性能损失。这将表现为使用新卷的 MySQL 数据库性能下降。

您可以将 EBS 卷“dd”到 /dev/null 以确保所有块都已被命中。这是我写的一篇关于如何做到这一点的文章:http: //alestic.com/2010/03/ebs-volume-initialization-from-snapshot

在通过查询将数据库带入内存时,也可能会影响性能。这是在任何平台上重新启动数据库时都会发生的标准 IO 问题,与 EC2 或 EBS 无关。

如果在一切都热身后性能仍然很慢并且应该嗡嗡作响,那么您可以尝试以下操作:

  • 创建一个新的 EBS 卷并对其进行测试,以防万一慢速卷在 EC2 上使用有缺陷的硬件。

  • 将您的 EC2 实例移至新硬件,以防当前硬件上的邻居网络繁重并干扰您的 EBS IO。这可以通过一个简单的停止/启动来完成(我在这里写过:http: //alestic.com/2011/02/ec2-move-hardware

  • 将您的数据库移动到 RAID-0 中配置的 4-8 个 EBS 卷。这是尝试消除 EBS IO 波动的常用方法。

  • 考虑试用 Amazon RDS。有些人发现,亚马逊负责这部分基础设施,他们可以获得更好的性能。

Note also that you may experience IO slowness while an EBS snapshot is being created from an EBS volume that is being written to heavily. One approach to alleviate this is to replicate the master MySQL database to a different server and create the snapshots on the second server's EBS volume(s).

于 2012-05-31T21:26:08.987 回答