史上最详细MySQL之Update 慢的排查思路

具体排查思路如下:

1、查看当时实例系统性能情况(IO、CPU、memory),排除系统性能干扰


如果 CPU 高、IO 高、wa 大:

先排查慢 SQL,再查当前并发数,一般是大量并发慢 SQL 导致。


如果 CPU 高、IO 中、wa 小:

排查慢 SQL,在查看当前并发数,一般是单个计算 SQL 导致。


如果 CPU 低、IO 高、wa 低:

排查当前占用 io 高的线程,有可能是 page clean 导致或日志刷新频繁导致。


2、检查 MySQL状态

查看 mysql porcesslist,查看当前是否有 wait lock(表锁,行锁,meata lock 等)。

查看 mysql processlist,是否有大量 send data、init、commit、clean up 状态。

查看 mysql processlist,计算并发,排查是否有并发压力。

查看 innodb buffer pool 命中率,排查 buffer 是否够用。

查看 mysql tmp,是否够用,open tables 是否等于 table_open_cache。


3、分析 SQL 语句

通过 explain 分析 SQL 的执行情况,是否走索引,是否存在 union。

通过 explain 分析 SQL 的执行情况,是否存在大表驱动小表,多表 join。

检查 SQL 是否存在产生额外临时表。

使用 profile 分析单条 SQL 语句。



4、分析应用程序执行 SQL 慢的时间

观察是单个 SQL 执行慢,还是所有语句都慢。

慢的 SQL 的时间是否有规律,有助于排查 MysSQL 的相关参数。



5、抓包及 strace 分析

使用 tcpdump 进行抓包,分析是 MySQL 返回慢,还是网络慢。

使用 strace 分析 MySQL 内部哪里慢,哪个函数导致的。


6、update 常见问题

1、Update 全表更新一个字段,数据量为 10w,更新特别慢。

2、Update 引起死锁问题。

3、Update 几百条数据消耗了 10s。

4、Update 同一个表,有些更新快,有些更新慢。


以上内容摘抄来源:​ ​https://mp.weixin.qq.com/s/2NA2zzhL3TRKCkx9s91PJA​

posted @ 2021-09-18 20:43  勤奋的蓝猫  阅读(46)  评论(0编辑  收藏  举报  来源