问题描述
控制台输出该提示 问题,大概率是出现在死锁上面。尝试获取一个事物时超时造成的。
解决方式
- 增加超时时间
可以尝试增加 innodb_lock_wait_timeout 的值。这可以让事务有更多的时间等待锁。(该方式不太建议使用,延长超时时间就意味着如果遇到这个情况时你的程序执行的时间也要变长)。
SET GLOBAL innodb_lock_wait_timeout = 时间;
-
优化你的执行SQL,减少不必要的事务;
2.1. 查看数据库当前的进程,看一下有无正在执行的慢SQL记录线程show processlist;
2.2 查看当前运行的所有事务
SELECT * FROM information_schema.INNODB_TRX;
2.3 查看出现的锁和对应关系
SELECT * FROM information_schema.INNODB_LOCKs; SELECT * FROM information_schema.INNODB_LOCK_waits;
进行分析优化你的SQL。
-
干掉死锁的事务(治标不治本)
查出来后进行复制查询结果关闭
select concat('KILL ',id,';') from information_schema.processlist where user='使用的数据库账号';
参考
https://www.cnblogs.com/shineman-zhang/articles/17539617.html