在压测一个申请接口过程中发现一个比较奇怪的现象,小并发(5个线程)情况下,数据库的cpu很快上升到90%多,应用cpu及qps都很低
发现问题后进行了如下排查:
1.首先可以确定瓶颈在数据库,需要先排查qps比较低的情况下为何数据库的cpu很高。首先先进行慢sql的排查。通过阿里云自带的数据诊断工具诊断后,未发现慢sql。通过pinpoint查看请求的链路发现sql的时间响应比较快,基本在10ms以内。
2.使用show full PROCESSLIST命令在压测期间多次执行该命令,并将结果导出。通过分析导出的执行文件
查看cpu中详细情况发现仅有4条sql。使用EXPLAIN发现sql未命中索引,导致全表扫描。最终通过优化索引的方式解决问题。
问题复盘:
1.全表扫描的sql为何诊断工具未发现为慢sql
通过排查发现,索引未命中的表数据量为44万,既不算多也不算少,因此全表扫描的响应时间没有特别长。如果该表数据量特别大,那么sql语句响应速度会特别慢,诊断工具就会发现这个慢sql
2.怎么分析出来该sql未命中索引?
一般可通过EXPLAIN来查看sql是否高效。