• Mysql 报错 Lock wait timeout exceeded; try restarting transaction 问题解决方法



    Spring 事务嵌套造成死锁

    在高并发的情况下,Spring事物造成数据库死锁,后续操作超时抛出异常。 
    Mysql数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错。

    这个mysql死锁现象主要是添加、修改或删除的操作添加了事务(添加了@Transactional注解或者是配置文件进行了配置),然后出异常的时候catch捕获了,导致事务没有收到异常一直在等待着,没有结束,也不会触发回滚操作,所以导致表被锁。

    在catch里把异常给抛出来,让事务能触发回滚,释放表的锁资源:throw new RuntimeException(e);

    或者:当前调用事务的方法设置为 Propagation.SUPPORTS: @Transactional(propagation=Propagation.SUPPORTS)

     或者 通过下面语句查找到为提交事务的数据,kill掉此线程即可。

    select * from information_schema.innodb_trx

    kill 20057;

  • 相关阅读:
    Beta 冲刺(1/7)
    福大软工 · 第十次作业
    11111111
    101
    7
    6
    5
    4
    p
    b2
  • 原文地址:https://www.cnblogs.com/Lucky-Suri/p/15162510.html
Copyright © 2020-2023  润新知