我在Amazon EC2(新加坡地区)上发布了我的网站,我使用MySQL RDS实例进行数据存储。除了表现之外,一切都很好。
我看来,我的所有查询,特别是select语句,执行速度非常慢。如果我在我的本地PC上查看此问题,那么它运行良好。但是当我试图从RDS实例获取数据时,它非常慢。一些select语句需要2-3秒才能获取数据。
我已正确调整所有表索引,并根据需要进行规范化/反规范化。我已在RDS自定义参数组上进行了所有必要的设置(例如 max_connection , buffer 等)。我不知道我是否遗漏了一些东西,但它对我没有用 - 性能没有增加。
那么,有人可以帮我解决这个问题吗?
答案 0 :(得分:28)
值得注意的是,无论出于何种原因,默认情况下,RDS中的MySQL查询缓存为OFF。我们本周学到了很多困难。
这对初始查询的执行没有帮助,但它可能会加快速度。
重新启用查询缓存:
query_cache_size
和query_cache_type
(免责声明:我不是DBA,所以我可能还有其他的东西在这里丢失)
答案 1 :(得分:8)
让RDS和EC2实例不在同一区域但在同一可用区域中以减少延迟非常重要。
我在爱尔兰的EC2上安装了一个API,并将数据库移动到我们为另一个项目设置的美国弗吉尼亚州的MySQL集群中,并且每次SQL查询的往返都使API无法使用。
答案 2 :(得分:3)
对我而言,它与MySQL无关,而是与t2.medium
上的实例类型无关。问题是我没有CPU积分,因为数据库上的负载太高而且余额一直在下降,直到最后,我的每小时收入要少得多。
以下是我在RDS CloudWatch中看到的CPU信用使用情况:
如果您遇到同样的问题,可能需要切换到其他实例。以下是实例类型列表:
https://aws.amazon.com/rds/instance-types/
希望这有帮助。
答案 3 :(得分:2)
RDS MySQL性能可以通过以下方式增加,假设系统具有更高的读取率:
答案 4 :(得分:2)
首先,我强烈建议您使用
查看这些查询上详细了解相关信息显示完整的过程列表
这将显示每个查询所花费的时间。
然后你可以使用
EXPLAIN
您可以在EXPLAIN
上详细了解相关信息这将显示您是否需要对查询进行一些增强
答案 5 :(得分:0)
您可以通过使用分析来查看查询占用时间的位置。使用以下查询:
这将告诉您查询的状态以及查询花费时间的位置。如果分析返回的所有时间总和小于查询的实际执行时间,则可能是网络带宽等其他因素可能是其原因。
答案 6 :(得分:0)
始终应在同一AWS可用区中部署源和rd,以降低网络延迟,并应在VPC中为RDS创建专用端点链接,以通过内部网络而不是通过Internet路由RDS端点。
参考:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html