MySQL 查询在 Amazon RDS 上非常慢,但在我的笔记本电脑上却非常快?

MySQL 查询在 Amazon RDS 上非常慢,但在我的笔记本电脑上却非常快?

我很想知道是否有人知道为什么会发生这种情况。我刚刚将我们的网站迁移到 Amazon RDS,我们最大的查询在我的 macbook 上执行需要 0.2 秒,但在最昂贵的 RDS 实例上执行需要 1.3 秒。

显然,我在本地计算机上禁用了查询缓存(并对此进行了测试),并且两个数据库完全相同。InnoDB,两者都具有相同的索引等。最快的 RDS 实例花费了我们一大笔钱(每月 2000 美元),我很快就失去了信心。有什么想法吗?

答案1

尝试尝试预配 IOPSRDS 提供的功能。无论实例大小,IO 都是有限的,您可以使用 Provision IOPS 设置(需支付额外费用)来提高 IO 性能。

您可以为每个数据库实例配置最多 3TB 的存储和 30,000 IOPS。对于在 m2.4xlarge 实例上运行的 50% 写入和 50% 读取的工作负载,您可以为 Oracle 实现最多 25,000 IOPS,为 MySQL 实现最多 12,500 IOPS。但是,通过配置最多 30,000 IOPS,您可能能够实现更低的延迟和更高的吞吐量。根据数据库工作负载、实例类型和数据库引擎选择,实际实现的 IOPS 可能与您配置的数量不同。请参阅 Amazon RDS 用户指南中影响实现的 IOPS 的因素部分以了解更多信息。

您可以从标准存储转换为预配置 IOPS 存储,并获得一致的吞吐量和较低的 I/O 延迟。这样做时,您会遇到短暂的可用性影响。您可以独立扩展 IOPS(以 1000 为增量)和动态存储,而无需停机。预配置的 IOPS 与请求的存储(以 GB 为单位)的比率应在 3 到 10 之间。例如,对于具有 1000 GB 存储空间的数据库实例,您可以预配置 3,000 到 10,000 IOPS。您可以根据应用程序流量的季节性变化等因素来增加或减少 IOPS。

AWS RDS 配置 IOPS

答案2

主要原因应该是您的计算机和 Amazon RDS 实例之间的延迟。您在哪里?如果您在美国,请确保您在美国东部或美国西部使用 RDS。如果您在欧洲、日本或亚洲,那里也有地区。

答案3

我在 Rackspace 服务器实例上遇到了类似的问题。即使我尽了最大努力配置了 Innodb,查询执行也需要很长时间。我最终转向了 Rackspace 提供的专用数据库产品。我猜想,磁盘密集型服务(例如数据库)在多个实例之间共享磁盘的虚拟化服务器上​​表现不佳。一般来说,大家似乎都一致认为 mysql 在裸机或其他针对数据库优化的基础设施上运行效果最好。我可能错了,但这是我得出的结论。

答案4

MySQL 查询缓存在 RDS 中默认处于关闭状态。这不会提高初始查询的性能,但总体上可能会加快速度。

您可以设置query_cache_type1并定义一个值query_cache_size。我还将thread_cache_size从 8 更改为 24,innodb_io_capacity从 200 更改为 1900,但我不知道这是否对您有帮助。

也创造AWS 数据库参数组在配置和调整数据库变量方面给了我很大帮助。

相关内容