结合zabbix监控mysql,让mysql性能飙升
前段时间客户的系统突然出现mysql只读集群cpu飙升的情况,飙升到最高点的时候,甚至导致应用服务器GC,幸好应用有备份服务器,流量直接切过去,客户也无感知。但是这个只是临时的解决办法,总归要找到具体的原因,和开发同事查了两天的应用日志和mysql的慢日志,始终无法定位到具体的问题。最后想到,既然这个问题会时不时出现,那能不能写一个脚本结合zabbix监控mysql消耗cpu最高的线程,然后把这些线程执行的语句调出来,这样开发同事就可以针对性的进行优化了。经过调研,这个方案确实可行,说干就干(具体脚本的实现和部署我已经在我的github上公开了,感兴趣的朋友拿走不谢:https://github.com/zhenghan008/MonitorAbnormalSql),效果果然是杠杆的。很快就找出了消耗cpu比较高的sql语句,结合zabbix的报警,开发同事很快就收到需要优化的sql语句了,结果发现就是其中一个功能,用户那边只要打开一个页面,后端就会轮询的去查询mysql的一个表,而这个表数据量越来越大,而且相关字段没有做索引,结果这个语句消耗的cpu就越来越高了。原因找到了,自然就好解决了。只需增加索引就可以了。至此问题顺利解决。后面也有出现几次异常sql报警,也很快就收到报警并迅速解决了。下面看看效果,优化后,mysql进程消耗cpu明显下降,性能得到较大提升。可以看到6月8号没优化前,mysql最高的时候cpu达到90%多,优化后,进程的cpu明显下降了,应用服务器也没再出现GC的情况。至此,问题算是完美解决了!