[英]Amazon RDS MySQL instance performs very slow
我已经在 Amazon EC2(新加坡地区)上发布了我的网站,并且我已经使用 MySQL RDS 实例进行数据存储。 除了性能之外,一切都很好。
我似乎,我所有的查询,尤其是 select 语句,执行得非常缓慢。 如果我在本地 PC 上检查此问题,则它运行良好。 但是当我尝试从 RDS 实例获取数据时,速度非常慢。 一些 select 语句需要 2-3 秒来获取数据。
我已经正确调整了所有表索引,并根据需要进行了规范化/反规范化。 我已经对 RDS 自定义参数组(例如max_connection 、缓冲区等)进行了所有必要的设置。 我不知道我是否遗漏了什么,但它对我不起作用 - 性能没有提高。
那么,有人可以帮我解决这个问题吗?
值得注意的是,无论出于何种原因,RDS 中默认情况下 MySQL 查询缓存是关闭的。 本周我们自己也艰难地了解到了这一点。
这对您的初始查询的性能没有帮助,但总体上可能会加快速度。
要重新启用查询缓存:
query_cache_size
和query_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 性能:
首先,我强烈建议使用以下方法查看这些查询
显示完整的进程列表
您可以在SHOW FULL PROCESSLIST上阅读更多相关信息
这将显示每个查询所需的时间。
然后你可以使用
解释
您可以在EXPLAIN上阅读更多相关信息
这将显示您是否需要对查询进行一些改进
您可以通过使用分析来检查查询在哪里花费时间。 使用以下查询:
这将告诉您查询的状态以及查询花费的时间。 如果分析返回的所有时间总和小于查询的实际执行时间,那么可能是网络带宽等其他因素造成的。
始终应在同一 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.