我已经发表了我在Amazon EC2(新加坡区域)的网站,我已经使用MySQL的RDS实例的数据存储。 一切正常,除了性能非常精细。
我看来,我所有的问题,特别是SELECT语句,则执行速度很慢。 如果我检查我的本地PC在这个问题上,有它工作得很好。 但是,当我试图从RDS实例中得到的数据,这是非常缓慢的。 一些SELECT语句需要2-3秒来获取数据。
我已经适当调整了所有表的索引,并根据需要规范化/反规范化。 我做了(如max_connection, 缓冲等)对RDS的自定义参数组的所有必要的设置。 我不知道如果我失去了一些东西,但它并没有为我工作 - 性能并没有增加。
因此,有人可以帮我这个问题?
值得一提的是,无论出于何种原因,MySQL查询缓存是默认关闭的RDS。 我们将硬盘的方式自己这个星期的经验教训。
这不会帮助你的初始查询的性能,但是它一般可以加快速度。
要重新启用查询缓存:
- 登录到控制台RDS
- 点击您的RDS实例,以查看它的详细信息
- 编辑数据库参数组
- 一定要同时设置
query_cache_size
和query_cache_type
(免责声明:我不是一个DBA所以可能会有其他的事情,我在这里失踪)
有你的RDS和EC2实例不在同一区域,但在同一个可用性区域,以尽量减少等待时间是很重要的。
我曾在爱尔兰托管在EC2的API和移动数据库在美国弗吉尼亚州一个MySQL集群,我们已经建立了另一个项目,并在每一个SQL查询的往返作出的API无法使用。
对我来说,这是没有任何关系与MySQL,而是实例类型我是t2.medium
。 问题是我跑出CPU学分的,因为在DB的负荷过高,平衡保持下去直到最后,我得到的远远少于每小时学分,然后在需要的地方。
以下是我在RDS的CloudWatch看到在CPU信用用法:
如果你有同样的问题,这可能是时间切换到不同的实例。 下面是实例类型的列表:
https://aws.amazon.com/rds/instance-types/
希望这可以帮助。
首先,我强烈建议使用一下这些查询
SHOW FULL PROCESSLIST
你可以阅读更多关于它的SHOW FULL PROCESSLIST
这将显示您的时间每个查询需要。
然后你可以使用
说明
你可以阅读更多关于它的EXPLAIN
这会告诉你,如果你需要在你的查询一些增强
RDS MySQL的性能可以以下列方式假设系统已经多个读比率来增加:
- 使用更大的实例类型,它们都具有较好的NW带宽。 例如AWS四EXL配备了1000 Mbps的带宽。
- 使用PIOPS存储,你可以从MySQL数据库中提取16KB 12500个IOPS
- 如果大量的读取,执行,添加一个或多个读取副本的提高读取性能
- 应用标准的实践,如:调整查询,应用指标等
您可以检查该查询通过利用分析的服用时间。 使用下面的查询:
- 设置分析= 1
- 执行你的选择查询
- 节目简介
这会告诉你关于查询的状态,其中查询将时间花在。 如果通过剖析返回的所有时间的总和小于查询的实际执行时间,那么也许其他因素,如网络带宽可能是它的原因。