32

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

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

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

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

4

8 回答 8

37

值得注意的是,无论出于何种原因,RDS 中 MySQL 查询缓存默认是关闭的。本周,我们自己学会了这一点。

这无助于您的初始查询的性能,但总体上可能会加快速度。

要重新启用查询缓存:

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

(免责声明:我不是 DBA,所以我可能在这里遗漏了其他东西)

于 2014-01-08T15:52:59.007 回答
9

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

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

于 2013-07-15T16:01:51.320 回答
9

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

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

在此处输入图像描述

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

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

希望这可以帮助。

于 2017-12-08T14:14:58.067 回答
3

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

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

首先,我强烈建议使用查看这些查询

显示完整的进程列表

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

这将显示每个查询花费的时间。

然后你可以使用

解释

你可以阅读更多关于它的解释

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

于 2014-08-12T08:04:39.153 回答
2

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

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

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

于 2017-09-25T09:45:05.307 回答
0

我发现迁移到 RDS 后,我所有的数据库索引都消失了!它们没有与架构和数据一起迁移。确保您的索引在那里。

于 2021-09-01T17:00:01.023 回答
0

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

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

于 2020-09-24T16:15:17.467 回答