Lock wait timeout exceeded; try restarting transaction 的原因是查询方法 还是变更新增
时间: 2024-09-06 21:04:19 浏览: 68
解决SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded_runtimeerror怎么修复
5星 · 资源好评率100%
"Lock wait timeout exceeded; try restarting transaction" 锁等待超时错误通常是由于并发事务之间的数据争夺造成的,而不是查询方法的问题,而是涉及到SQL的更新(UPDATE)或插入(INSERT)操作。当两个或更多的事务同时对某一行数据进行修改,而它们都需要对该行加锁时,可能会导致锁竞争。若其中一个事务长时间未能获得所需的锁,就会触发这个错误,因为MySQL有设定的最大等待时间(默认为60秒)。
当遇到这种情况,你可以尝试以下几种解决方法:
1. **优化查询**:检查是否有不必要的锁或者减少锁定范围,比如选择合适的锁定粒度(共享锁还是排他锁)。
2. **设置更大的锁等待超时**:通过`SET innodb_lock_wait_timeout`或`session.lock_wait_timeout`来延长等待时间,但这不是长久之计。
3. **批量操作**:尽可能地减少单次事务处理的数据量,尤其是更新大量行的时候。
4. **设计数据库模式**:合理利用索引和分区,降低并发冲突。
5. **重启事务或服务**:作为最后手段,如果上述都不奏效,可能需要重启事务或者整个MySQL服务。
阅读全文