Lock wait timeout exceeded; try restarting transaction
-- 查看进程,删除trx_state=LOCK的进程 select * from information_schema.innodb_trx; kill trx_mysql_thread_id; -- 删除耗时较长的线程 SELECT * from information_schema.`PROCESSLIST` WHERE Time > 1000 AND USER = 'root' ORDER BY TIME desc; kill id;
引起Lock的原因:转载:https://www.cnblogs.com/myself1012/p/17668938.html
使用@Transactional注解过程中产生锁
原因:@Transactional是Spring框架提供的注解,用于注解类或方法,表示此类或方法需要在一个事务内执行。
1、一个事务中对同一张表进行了多次操作
2、在一个事务中对同一张表进行了读操作(select语句)和写操作(insert、update、delete语句)当出现这种情况时,可能会导致表被锁住,其他事务无法对它进行操作。如果需要并发地对表进行读写操作,这就会成为一个问题。
解决:
1、将读操作和写操作放在不同的事务中执行(方法拆分,使用多个@Transactional)
2、调整事务隔离级别(@Transactional(isolation = Isolation.READ_UNCOMMITTED))
3、插入、修改、删除操作进行异常捕获,然后手动设置事务回滚(不使用@Transactional注解)

浙公网安备 33010602011771号