MySQL问题排查
硬件
问题一:cpu负载高,IO负载低
内存不够;磁盘性能差;SQL问题;IO出问题了(磁盘到临界了、raid设计不好、raid降级、锁、在单位时间内tps过高);tps过高,大量的小数据IO;大量的全表扫描
问题二:IO负载高,cpu负载低
大量小的IO写操作:autocommit,产生大量小IO;IO/PS:磁盘的一个定值,硬件出厂的时候,厂家定义的一个每秒最大的IO次数。
大量大的IO写操作:SQL问题的几率比较大
问题三:IO和cpu负载都很高
硬件不够了或sql存在问题
SQL
针对突然的业务办理卡顿,无法进行正常的业务处理,需要立马解决的场景。
1、show processlist:查询每个MySQL连接(或线程)的当前状态
2、explain sql,通过执行计划判断,索引问题(有没有、合不合理)或者语句本身问题
3、show status like '%lock%'; # 查询锁状态
4、kill SESSION_ID; # 杀掉有问题的session
针对业务周期性的卡顿,例如在每天10-11点业务特别慢,但是还能够使用,过了这段时间就好了。
1、查看slowlog,分析slowlog,分析出查询慢的语句。
2、按照一定优先级,进行一个一个的排查所有慢语句。
3、分析优先级最高的sql,进行explain调试,查看语句执行时间。
4、调整索引或语句本身。
工具
检查问题常用工具
不常用但好用的工具
...
内容来源:MySQL 优化实施方案
Last updated