MySQL反应慢的排查思路

MySQL反应慢的排查思路

author: he xiaodong date: 2019-04-15

版权归属 叶金荣,这些内容是从他的QQ群复制的,此篇当作笔记

导致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 执行慢,有时未必是效率低,也可能是因为锁等待,甚⾄是磁盘满了

AD: 顺道推广小册赚点佣金 ↣ 点此跳转

叶金荣网站:链接