先说原因
测试环境的binlog 没有自动删除,导致磁盘占满,请求的 sql全都堵塞,事务锁又进一步影响到后续的事务,报Lock wait timeout exceeded
,大部分事务state 都是 commit、starting、query。):
排查
- 日志报错
Lock wait timeout exceeded
首先想到是事务死锁了使用SELECT * FROM information_schema.INNODB_TRX;
查看正在执行的事务,发现全是state状态大部分都是 commit、starting、query,而不是锁等待状态,并且执行很长时间了。然后show processlist
查看线程,也是发现大量的线程,基本一个事务对应一个线程,全都堵塞在那。很奇怪,没死锁又全在等待。 没思路了。。。 先把线程都kill掉,测试下正常了,然后又会慢慢出现等待的事务。 - 求助搜索引擎,有种可能是 数据盘写满了所以都在等待,
du -f
果然是磁盘满了,然后就发现是binlog没自动删除,占满了磁盘,清除部分binlog后,正常了。 /etc/my.cnf
设置expire_logs_days = 15
保留15天的。