RDS 实例 CPU 为 99%

Posted

技术标签:

【中文标题】RDS 实例 CPU 为 99%【英文标题】:The RDS instance CPU is 99% 【发布时间】:2020-10-08 11:09:49 【问题描述】:

在 AWS RDS 中执行耗时较长的查询

一个查询花费了太多时间(大约 3 分钟)。 Db 托管在 AWS RDS 中,具有 2cpu 和 4GB ram(t2.medium)

查询示例是

select  DATE_FORMAT(log_date, '%d-%m-%Y') as 'Day',
        sum(people_count) as 'count'"
    from  avg_people_pass
    where  log_date >= #startDate
      and  log_date <= #endDate 

感谢您的帮助,因为它落后于所有解决方案。

【问题讨论】:

请阅读本文并特别注意查询性能部分。 meta.***.com/questions/271055/… 那么请edit你的问题提供更多关于你的情况的信息。 您的查询中似乎缺少GROUP BY。这是实际的完整查询吗? 另外,如果您能描述一下表格的大小(包括行和列),将会很有帮助。 13 列 10M 行 我需要升级实例吗? 【参考方案1】:

select DATE_FORMAT(log_date, '%d-%m-%Y') as 'Day',sum(people_count) as 'count' from avg_people_pass where log_date &gt;= #startDate and log_date &lt;= #endDate

我猜您没有在此表上配置索引,因此您正在执行全表扫描。 3 分钟的执行时间意味着一个设计糟糕的大表,没有索引、键或优化。

跑步时会发生什么

explain select DATE_FORMAT(log_date, '%d-%m-%Y') as 'Day',sum(people_count) as 'count' from avg_people_pass where log_date &gt;= #startDate and log_date &lt;= #endDate

查询计划将有助于缩小性能问题的范围。

【讨论】:

【参考方案2】:

假设您在此列上还没有索引,这应该使它运行得尽可能快:

CREATE INDEX idx1 ON avg_people_pass (log_date);

【讨论】:

以上是关于RDS 实例 CPU 为 99%的主要内容,如果未能解决你的问题,请参考以下文章

在ECS上搭建阿里云数据库RDS的只读实例

阿里云rds内存过高是啥原因

以编程方式为 Elastic Beanstalk 配置 RDS 实例

AWS:为单独的 EB 实例克隆 RDS

MySQL 深入剖析Explain

如果我们使用默认 VPC 和安全组将公开访问设置为“否”,为啥 EC2 实例无法访问 RDS 实例?