驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
由于慢SQL打崩系统,带来的教训:不要忽视小问题
/  

由于慢SQL打崩系统,带来的教训:不要忽视小问题

开篇

平时好好的 RDS从今天早晨9点开始,CPU使用率急速提高,一会儿后相应的监控短信也发送来,提示CPU的使用率为 100%

经过询问发现,9 点开始有一批用户会在涌入APP,流量最高达到了平时的 5-8 倍,所以平时的一些小问题被放大,导致了此次事故。

解决问题的过程现在看来不算难,但是发生问题的原因必须明确:不重视平时的小问题,小问题不及时解决

过程

数据库是在阿里云的RDS上的,控制台有个功能是日志管理-慢日志明细,可以很清楚的如下细节:

  • 慢SQL执行时间
  • SQL扫描行数

大多数慢SQL都是因为扫描行数过多导致的,当业务刚上线,数据量不大的时候,慢SQL的问题还不突出,但是你也要发现一起处理一起,要不然就像我们一样,因为慢SQL,服务崩了。

这里插播下如果没有RDS的慢日志功能,可以通过设置MySQL达到记录慢SQL的目的。

通过可以通过MySQL自带的EXPLAIN来对慢SQL进行优化,特别注意当typeALL的情况,且rows非常大的情况。

通常处理慢SQL的办法是加索引,但是加索引前我们需要明确下如下几点:

  • 索引不是越多越好,过多的索引势必导致插入速度过慢
  • 某个字段,只有几种不同的可选项的时候,不需要加索引。典型的就是:性别、是否删除 这些只有几个选项的。
  • 优化前后,记得从EXPLAIN上进行对比。

至于具体的优化方案:网上文章很多,我这里就不再重复了,大家自己找资料。

结余

勿以善小而不为,勿以恶小而为之。