mysql事务锁导致tomcat崩溃_mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法...

锁表问题提示:Lock wait timeout exceeded; try restarting transaction

解决锁表方法

查询数据库阻塞的进程

SELECT * FROM information_schema.innodb_trx

5976df00f8e9f259ed7384ba4fff781c.png

主要看箭头指向的这几个字段,如果有阻塞数据(不为0的就是阻塞的),找到后在根据下图这个字段:try_mysql_thread_id 作为这条数据的主键id执行这个sql进行删除: kill id ;(杀死对应id的进程).假设这里try_mysql_thread_id=进程id 的这条数据是锁了。我们执行 kill 进程id 删除就不在锁表了

常用锁表命令

//查看进程id,然后用kill id杀掉进程

show processlist;

SELECT * FROM information_schema.PROCESSLIST;

//查询正在执行的进程

SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ;

//查询是否锁表

show OPEN TABLES where In_use > 0;

//查看被锁住的

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

//等待锁定

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

//杀掉锁表进程

kill 12041

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction 是MySQL数据库中的一种常见错误,它通常发生在尝试获取但等待时间超过系统设置的阈值时。这可能是因为并发操作太多,导致资源争夺,或者事务处理过程中出现了阻塞。 解决这个问题的步骤可以包括: 1. **检查并发量**:确认是否有过多的并发连接在运行,尝试减少并发数或优化查询性能。 2. **增加超时时间**:在MySQL配置中,可以通过`innodb_lock_wait_timeout`参数调整等待超时时间,但要注意,太大的值可能会导致性能下降。 3. **优化SQL查询**:确保查询是有效的,并使用索引来提高数据访问速度。避免使用SELECT *,只选择真正需要的列。 4. **使用RESTART TRANSACTION**:在Java代码中,如果你知道当前事务存在问题并可以重试,可以尝试使用`connection.rollback()`然后`connection.commit()`来重启事务,但务必谨慎,因为这可能导致数据不一致。 5. **检查死锁**:使用`SHOW ENGINE INNODB STATUS`命令检查是否发生了死锁,如果是,则需要手动解决死锁或优化事务处理策略。 6. **监控数据库状态**:定期检查MySQL服务器的日志文件,查看是否有其他异常信息可以帮助诊断问题。 如果你正在使用JDBC进行编程,你可以在遇到这个异常时捕获并处理,例如添加重试逻辑或者记录日志以追踪问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值