繁体   English   中英

Amazon RDS MySQL 实例执行速度非常慢

[英]Amazon RDS MySQL instance performs very slow

我已经在 Amazon EC2(新加坡地区)上发布了我的网站,并且我已经使用 MySQL RDS 实例进行数据存储。 除了性能之外,一切都很好。

我似乎,我所有的查询,尤其是 select 语句,执行得非常缓慢。 如果我在本地 PC 上检查此问题,则它运行良好。 但是当我尝试从 RDS 实例获取数据时,速度非常慢。 一些 select 语句需要 2-3 秒来获取数据。

我已经正确调整了所有表索引,并根据需要进行了规范化/反规范化。 我已经对 RDS 自定义参数组(例如max_connection缓冲区等)进行了所有必要的设置。 我不知道我是否遗漏了什么,但它对我不起作用 - 性能没有提高。

那么,有人可以帮我解决这个问题吗?

值得注意的是,无论出于何种原因,RDS 中默认情况下 MySQL 查询缓存是关闭的。 本周我们自己也艰难地了解到了这一点。

这对您的初始查询的性能没有帮助,但总体上可能会加快速度。

要重新启用查询缓存:

  1. 登录RDS控制台
  2. 单击您的 RDS 实例以查看其详细信息
  3. 编辑数据库参数组
  4. 确保同时设置query_cache_sizequery_cache_type

(免责声明:我不是 DBA,所以我在这里可能还缺少其他东西)

重要的是让您的 RDS 和 EC2 实例不仅在同一个区域中,而且在同一个可用区中,以最大限度地减少延迟。

我在爱尔兰的 EC2 上托管了一个 API,并将数据库移到了美国弗吉尼亚州的 MySQL 集群,我们为另一个项目设置了该集群,每个 SQL 查询的往返都使 API 无法使用。

对我来说,这与 MySQL 无关,而是与我在t2.medium上的实例类型有关。 问题是我用完了 CPU 积分,因为数据库上的负载太高,余额一直在下降,直到最后,我每小时获得的积分远远少于需要的积分。

这是我在 RDS CloudWatch 的 CPU Credit Usage 下看到的:

在此处输入图片说明

如果您遇到同样的问题,可能是时候切换到不同的实例了。 以下是实例类型列表:

https://aws.amazon.com/rds/instance-types/

希望这可以帮助。

假设系统具有更高的读取率,可以通过以下方式提高 RDS MySQL 性能:

  1. 使用更大的实例类型,它们具有更好的 NW 带宽。 示例 AWS Quadruple EXL 具有 1,000 Mbps 带宽。
  2. 使用 PIOPS 存储您可以从 MySQL DB 中提取 16KB 的 12,500 IOPS
  3. 如果执行大量读取,请添加一个或多个只读副本以提高读取性能
  4. 应用标准实践,例如:调整查询、应用索引等

首先,我强烈建议使用以下方法查看这些查询

显示完整的进程列表

您可以在SHOW FULL PROCESSLIST上阅读更多相关信息

这将显示每个查询所需的时间。

然后你可以使用

解释

您可以在EXPLAIN上阅读更多相关信息

这将显示您是否需要对查询进行一些改进

您可以通过使用分析来检查查询在哪里花费时间。 使用以下查询:

  1. 设置分析=1
  2. 执行您的选择查询
  3. 显示个人资料

这将告诉您查询的状态以及查询花费的时间。 如果分析返回的所有时间总和小于查询的实际执行时间,那么可能是网络带宽等其他因素造成的。

始终应在同一 AWS 可用区中部署源和 rds 以降低网络延迟,并应在 VPC 中为 RDS 创建私有端点链接以通过内部网络而不是通过 Internet 路由连接 RDS 端点。

参考: https : //docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM