故障原因
下午14:46左右出现大量慢sql导致mysql服务器的cpu飙升到100%
处理过程
阿里云查看性能趋势,发现在14:46:00cpu飙升到100%
排查思路:
一般引起cpu飙升的原因很可能是扫描行数骤增
查看出现异常之前30分钟内的扫描行数,发现14:29左右出现明显的行数扫描增加的情况
通过sql洞察查看15:46:00之前1小时内sql执行情况,并按总扫描行数降序排序,发现14:30到14:35出现一句sql扫描行数明显高于其他sql,访问次数达到2251次,平均单次扫描行数达到了142521行,通过explain查询sql执行计划,发现该查询语句出现了全表扫描的情况
查看详情发现sql中的branch_no出现了123456这种类似测试的查询条件,询问了实施,发现是通过openapi接口调用的时候传值出现的情况
当前处理方案为增加bank_branch_info表branch_no字段的索引,由实施那边调整查询策略,此外对部分访问量较大的慢sql增加了索引
暴露的问题
1.部分openapi接口中的查询语句由于未设置索引,查询的时候会出现全表扫描,频繁请求的情况下容易引起cpu短时间内飙升的情况
改进措施
目前采取的改进措施主要包括
1.增加bank_branch_info表branch_no字段的索引
2.优化访问量较多的慢sql,通过增加索引方式来做优化