开发者社区> 问答> 正文

【RDS】RDS MySQL/MariaDB TX版实例CPU使用率较高,什么原因?

已解决

RDS MySQL/MariaDB TX版实例CPU使用率较高,什么原因?

展开
收起
云上猫猫 2022-01-13 13:37:57 1564 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    应用负载(QPS)高

    对于因应用负载高导致CPU使用率高的状况,使用SQL进行优化的余地不大,建议您从应用架构、实例规格等方面来处理问题。请参考以下方法:

    • 升级实例规格,增加CPU资源,详情请参见变更配置

    • 增加只读实例,将对数据一致性不敏感的查询(比如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力,详情请参见创建MySQL只读实例

    • 使用阿里云PolarDB-X云原生分布式数据库,自动进行分库分表,将查询压力分担到多个RDS实例上。

    • 使用阿里云云数据库Memcache或者云数据库Redis,尽量从缓存中获取常用的查询结果,减轻RDS实例的压力。

    • 对于查询数据比较静态、查询重复度高、查询结果集小于1MB的应用,考虑开启查询缓存(Query Cache)。

    说明: 能否从开启查询缓存(Query Cache)中获益需要经过测试,具体设置请参见RDS MySQL 版查询缓存(Query Cache)的设置和使用

    • 定期归档历史数据、采用分库分表或者分区的方式减小查询访问的数据量。 尽量优化查询,减少查询的执行成本,提高应用可扩展性。

    慢SQL导致查询成本高

    解决该问题的原则:定位效率低的查询、优化查询的执行效率、降低查询执行的成本。

    1、通过以下方式定位效率低的查询:

    • 执行以下SQL语句,查看当前执行的查询语句。
    show processlist;
    show full processlist;
    

    系统显示类似如下。 156161344435232_zh-CN.png 查询时间长、运行状态为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.依次单击目标实例右侧的性能>实例会话。 image.png c.单击SQL列中的查询文本,即可显示完整的查询和其执行计划。

    2、得到需要优化的查询语句后,可以通过DMS控制台上的SQL诊断来获取优化建议。诊断报告同样适用于排查历史实例CPU使用率高的问题:

    a.通过DMS控制台登录实例。

    b.单击页面上方的SQL窗口,选择对应的库。

    c.将查询语句粘贴到SQL窗口,单击SQL诊断,即可得到优化建议。 image (1).png

    3、根据您实际情况,选择优化建议进行处理。例如添加索引,确认执行查询成本会大幅减少。

    2022-01-13 14:00:34
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像