MySQL反应慢的排查思路

一、导致MySQL慢可能的因素有

1、计算资源不足

2、系统层面未进行基本的优化,或不同进程间资源抢占

3、MySQL配置不科学(附神器:

http://imysql.com/my-cnf-wizard.html)

4、垃圾SQL满天飞

二、查看系统层面负载手段

1、top查看整体负载情况,快速确认哪个进程系负载高

2、free查看内存情况,是否有内存泄露和用了swap等风险

3、vmstat/sar查看当前系统瓶颈到底在哪,如CPU、IO、网络等

4、终极神器perf top查看cpu消耗在哪些系统调用函数

三、查看MySQL的整体情况

1、观察show processlist输出中是否有临时表、排序、大量逻辑读、锁等待等状态

2、观察show engine innodb status输出中是否有大事务、长事务、锁等待等状态

四、干掉垃圾SQL,常用手段

1、用explain、desc观察执行计划

2、用profiling定位sql执行的瓶颈

3、用pt-query-digest分析慢sql

五、几个窍门

1、mysqld进程消耗CPU长时间超过90%的话,99.9%是因为没用好索引

2、cpu的%sys高的话,大概率是swap或中断不均衡导致,也可能是有多个索引且超高并发写入(更新),或者有很严重的锁等待事件

3、最⼤的瓶颈通常是在磁盘I/O上,因此尽量用高速磁盘设备

4、如果物理磁盘无法再升级,则通过增加内存提升性能容量

5、遇到无法诊断的问题时,试试⽤perf top来观测跟踪

6、SQL执行慢,有时未必是效率低,也可能是因为锁等待,甚⾄是磁盘满了

MySQL反应慢的排查思路

原文始发于:MySQL反应慢的排查思路