1205 - Lock wait timeout exceeded; try restarting transaction(解决备忘)
Lock wait timeout exceeded; try restarting transaction
原因:超过锁等待超时;请尝试重新启动事务
解决方法:更改数据库的事务隔离级别。
首先我这个是用INSERT INTO SELECT 方法批量处理了两个表,进行数据转移,大概有42万条数据(业务需求),然后数据库报错
1205 - Lock wait timeout exceeded; try restarting transaction
时间: 51.026s
在项目里面用的jdbcTemplate去进行数据库的操作。
然后项目是spring boot的项目,在方法上面加上了这个
@Transactional(isolation = Isolation.READ_COMMITTED)
在需要事务的类或者方法(service)上面添加@Transactional() 注解,里面可以配置需要的事务,如果没有设置默认的事务等级,需要在此添加isolation和propagation属性。
Isolation :隔离级别
DEFAULT(TransactionDefinition.ISOLATION_DEFAULT),
READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED),
READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED),
REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ),
SERIALIZABLE(TransactionDefinition.ISOLATION_SERIALIZABLE);
SERIALIZABLE,可序列化
REPEATABLE_READ,可重复读取
READ_COMMITTED,读已提交
READ_UNCOMMITTED,读未提交
DEFAULT,默认
一般来说是默认的隔离级别,发生了这个问题,我给改成了读已提交。
什么是事务的隔离级别?---->哦,原来这就是“事务”,这就是“事务隔离级别”.
发现一个有意思的事情
我读源码的时候看见,这个隔离级别和传播行为都是实现的TransactionDefinition 这个接口,这个接口是干啥的呢?
TransactionDefinition接口控制着事务的属性
如何控制的呢?
1,getTimeout()方法,它返回一个事务必须完成的时间限制(以秒为单位)
default int getTimeout() {
return TIMEOUT_DEFAULT;
}
2,isReadOnly()方法,它表示事务是否只读。事务管理器的实现可以利用这个值来优化事务的执行,并确保事务只进行读取操作。
default boolean isReadOnly() {
return false;
}
3,getPropagationBehavior()方法·,返回传播值。
default int getPropagationBehavior() {
return PROPAGATION_REQUIRED;
}
4,getIsolationLevel()方法,返回隔离级别,可以看的默认的是这个隔离级别。
default int getIsolationLevel() {
return ISOLATION_DEFAULT;
}
今天有点累,后天周末,接着写完把,反正解决方法是给出来了,希望可以帮到你,刚刚使用,没有研究透彻,希望可以有人指点一下,谢谢
推荐阅读
-
Lock wait timeout exceeded; try restarting transaction
-
Mysql出现“ Lock wait timeout exceeded; try restarting trans
-
[Err] 1205 - Lock wait timeout exceeded; try restarting transaction
-
[Err] 1205 - Lock wait timeout exceeded; try restarting transaction
-
mysql 1205 - Lock wait timeout exceeded; try restarting transaction
-
MySQL 1205-Lock wait timeout exceeded; try restarting transaction
-
1205 - Lock wait timeout exceeded; try restarting transaction(解决备忘)
-
Lock wait timeout exceeded try restarting transaction
-
1205 - Lock wait timeout exceeded; try restarting transaction
-
Lock wait timeout exceeded; try restarting transaction