记mysql语句执行堵塞排查

先说原因

测试环境的binlog 没有自动删除,导致磁盘占满,请求的 sql全都堵塞,事务锁又进一步影响到后续的事务,报Lock wait timeout exceeded,大部分事务state 都是 commit、starting、query。):

排查

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