1. 查看当前数据库的线程情况:

    SHOW FULL PROCESSLIST;

    

  2. 查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程

    SELECT * FROM information_schema.INNODB_TRX;

    

    trx_mysql_thread_id是否在1.(show full processlist)里面的sleep线程中

    如果在,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

  3. kill掉被食物卡住的线程

    kill 44;

 注:此方法治标不治本,如果是事务未提交还是要找到没提交的逻辑,修改之,才能把问题根除!

 注:相关知识点

  1.导致mysql锁的原因:

    执行DML操作没有commit,再执行删除操作就会锁表。

    在同一事务内先后对同一条数据进行插入和更新操作。

    表索引设计不当,导致数据库出现死锁。

    阻塞DDL,继而阻塞所有同表的后续操作。

  2.查看mysql是否自动提交事务

    select @@autocommit 

  

posted on 2018-11-09 10:52  杨杨^.^  阅读(539)  评论(0)    收藏  举报