RDS MySQL/MariaDB TX版实例CPU使用率较高,什么原因?
应用负载(QPS)高
对于因应用负载高导致CPU使用率高的状况,使用SQL进行优化的余地不大,建议您从应用架构、实例规格等方面来处理问题。请参考以下方法:
升级实例规格,增加CPU资源,详情请参见变更配置。
增加只读实例,将对数据一致性不敏感的查询(比如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力,详情请参见创建MySQL只读实例。
使用阿里云PolarDB-X云原生分布式数据库,自动进行分库分表,将查询压力分担到多个RDS实例上。
使用阿里云云数据库Memcache或者云数据库Redis,尽量从缓存中获取常用的查询结果,减轻RDS实例的压力。
对于查询数据比较静态、查询重复度高、查询结果集小于1MB的应用,考虑开启查询缓存(Query Cache)。
说明: 能否从开启查询缓存(Query Cache)中获益需要经过测试,具体设置请参见RDS MySQL 版查询缓存(Query Cache)的设置和使用。
慢SQL导致查询成本高
解决该问题的原则:定位效率低的查询、优化查询的执行效率、降低查询执行的成本。
1、通过以下方式定位效率低的查询:
show processlist;
show full processlist;
系统显示类似如下。 查询时间长、运行状态为Sending data、Copying to tmp table、Copying to tmp table on disk、Sorting result、Using filesort的查询会话可能均包含性能问题。
若在QPS高导致CPU使用率高的场景中,查询执行时间通常比较短,show processlist;命令或实例会话中可能会不容易捕捉到当前执行的查询。但是您可以通过执行以下SQL语句进行查询。 explain [$SQL]
您可以通过执行类似kill [$ID];的命令来终止长时间执行的会话,终止会话请参见RDS MySQL 版如何终止会话。关于长时间执行会话的管理,请参见RDS MySQL 版管理长时间运行查询。 说明:[$ID]为该查询语句对应的会话ID。
通过数据库自治服务DAS查看当前执行的查询:
a.登录数据库自治服务控制台。
b.依次单击目标实例右侧的性能>实例会话。 c.单击SQL列中的查询文本,即可显示完整的查询和其执行计划。
2、得到需要优化的查询语句后,可以通过DMS控制台上的SQL诊断来获取优化建议。诊断报告同样适用于排查历史实例CPU使用率高的问题:
a.通过DMS控制台登录实例。
b.单击页面上方的SQL窗口,选择对应的库。
c.将查询语句粘贴到SQL窗口,单击SQL诊断,即可得到优化建议。
3、根据您实际情况,选择优化建议进行处理。例如添加索引,确认执行查询成本会大幅减少。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。