MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

本文介绍了在MySQL中遇到Lock wait timeout exceeded错误的分析和解决过程。通过检查锁情况、查询锁等待状态及检查事务,发现并解决了一个长时间运行的未提交事务,从而解决了锁超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

早上到公司,发现测试环境一直记载不出来数据,排查后发现是mysql lock的问题,每次执行一条update语句,都会提示等待锁超时,根据这条sql定位到出现问题的表。

昨天晚上走还是好好的QAQ。

分析

我这边使用的是 MySQL 数据库,出现问题的表的引擎是 InnoDB 表类型,当发生竞争时会出现锁等待的情况。

在出现锁等待时,会根据参数 innodb_lock_wait_timeout(默认50s)的配置,判断是否需要进行 timeout 的操作,如果等待时间超过了设置的时间就会报错。

MySQL 执行 UPDATE 语句很慢并出现 Lock wait timeout exceeded; try restarting transaction 错误,通常是由锁竞争、长事务、索引问题或其他性能瓶颈导致的。 

根据这一情况,网上的说法:

1、多台服务器同时操作同一数据库。
2、在同一事务内先后对同一条数据进行插入和更新操作。
3、同时对同一张表进行插入和更新操作。
4、事务A对记录C进行更新/删除操作的请求未commit时,事务B也对记录C进行更新/删除操作。此时,B会等A提交事务,释放行锁。当等待时间超过innodb_lock_wait_timeout设

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值