记一次mysql磁盘io高的问题排查

记一次mysql磁盘io高的问题排查,第1张

现象是,系统里的java连接mysql超时了,

于是去mysql的机器,查看/var/log/messages日志,查对应的时间点的情况

发现mysql被阻塞了blocked for more than 120 seconds,mysql的io非常之高,用top查看系统的负载也到达了50的样子

用mpstat查看cpu情况

好明显,都在等io

用iostat查看io情况,%util的值,一直在80%,99%之间变化

以为磁盘有问题,用dd测下速看看

从上面的结果看,也还好,没问题

以为可能磁盘有坏道,用下面命令也扫了一遍,没问题

结果也没有坏的块,这个过程,很耗时。

用show processlist命令查看mysql正在忙着什么,一看,也没什么任务在执行的

想看看mysql,研究写哪个文件时,最耗时的

从上面结果来看,xxl_job是最耗时的。知道点眉目了,因为公司的定时任务是用的xxljob,定时任务里,有每几秒执行的任务,我猜它的日志记录一定很大,于是查看一下

我的天,这个表的记录有千万!!!这些记录,没做定时任务来清理,由于都是一些没用的记录,所以这个表的数据我全清了

清了之后,再用iostat查看

%util一下子就降下来了,用iotop查看mysql进程的io也下降了

cpu的iowait也下降了

定义一个事件,让mysql定时清理30天前的日志记录

记录一下,希望对有需要的朋友也起一点提示

mysql中cpu负载很高,是什么原因

1、确定高负载的类型 htop,dstat命令看负载高是CPU还是IO

看具体是哪个用户哪个进程占用了相关系统资源,当前CPU、内存谁在使用

2、监控具体的sql语句,是insert update 还是 delete导致高负载

抓取mysql包分析,一般抓3306端口的数据 看出最繁忙的sql语句了

3、检查mysql日志

分析mysql慢日志,查看哪些sql语句最耗时

检查mysql配置参数是否有问题,引起大量的IO或者高CPU *** 作

innodb_flush_log_at_trx_commit 、innodb_buffer_pool_size 、key_buffer_size 等重要参数

4、检查硬件问题

mysql进程CPU占用过高,一般的原因是索引不当。如果没有索引,顺序查找会带来IO占用高,你现在的IO不高,很可能是order by后面的字句没有索引造成。

mysql可以记录所有执行的SQL语句,但是我们一般记录慢速SQL即可,方法是在my.ini中使用下面的指令:

log-slow-queries


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8630043.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存