第一步:
因为mysql数据库默认是autocommit的自动提交,需要查看一下数据库的设置是否真的是自动提交
select @@autocommit;
确定是自动提交,那么就进一步确定问题,需要先知道MySQL数据库的information_schema库的三个关于锁的表:
innodb_trx – 当前运行的所有事务
innodb_locks – 当前出现的锁
innodb_lock_waits – 锁等待的对应关系
** 第二步: **
查看数据库的事物隔离级别
select @@tx_isolation;
REPEATABLE-READ : MySQL默认的事务隔离级别就是REPEATABLE-READ
** 第三步:**
查看当前数据库的线程情况:
SHOW FULL PROCESSLIST;
没有看到正在执行得很慢的sql记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否存在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉
** 第四步:**
查看当前数据库的lock进程
SELECT * FROM information_schema.INNODB_TRX;
发现有id为616694的sql,需要手动kill掉
KILL 616694;