问题症状

RDS数据库经常收到CPU使用率高的监控报警,找不到具体的原因,只能重启RDS实例来解决。

问题原因

要彻底解决监控报警问题,需要找到问题的根源,CPU使用率高的原因,一般情况下导致CPU使用率有以下几个原因:

  • 系统执行应用提交查询(包括数据修改操作)时需要大量的逻辑读
  • 实例的 QPS(每秒执行的查询次数)高
  • 查询执行成本(查询访问表数据行数 avg_lgc_io)高

解决方案

  • 生成诊断报告,查看诊断报告提供的优化建议进行SQL优化
  • 对于由应用负载高导致的 CPU 使用率高的状况,使用 SQL 查询进行优化的余地不大,建议从应用架构、实例规格等方面来解决,例如:
    1. 升级实例规格,增加 CPU 资源。
    2. 增加只读实例,将对数据一致性不敏感的查询(比如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力。
    3. 使用阿里云 DRDS 产品,自动进行分库分表,将查询压力分担到多个 RDS 实例上。
    4. 使用阿里云 Memcache 或者云 Redis 产品,尽量从缓存中获取常用的查询结果,减轻 RDS 实例的压力。
    5. 对于查询数据比较静态、查询重复度高、查询结果集小于 1 MB 的应用,考虑开启查询缓存(Query Cache)。
    6. 定期归档历史数据、采用分库分表或者分区的方式减小查询访问的数据量。
    7. 尽量优化查询,减少查询的执行成本(逻辑 IO,执行需要访问的表数据行数),提高应用可扩展性。
  • 针对avg_lgc_io的情况解决办法是定位效率低的查询、优化查询的执行效率、降低查询执行的成本

Leave a Reply

Your email address will not be published. Required fields are marked *