Lock wait timeout exceeded解决优化方案 一 , 定位问题可以通过以下几种命令去定位 二 , 解决方案紧急措施1.紧急措施:终止(KILL)相关的线程,释放任何被该线程持有的锁2.次之紧急措施:调整 In
“Lock wait timeout exceeded; try restarting transaction” 一般出现这样的错误时,往往是因为一些事务在等待获取某个锁,但由于这个锁被其他长时间未完成的事务持有,所以导致等待超时。
SHOW FULL PROCESSLIST;
显示当前Mysql中的所有进程信息,包括每个进程的ID、用户、主机、数据库、命令、运行时间等。如果你看到有某个进程的运行时间特别长,或者状态一直处于"Locked",那么就有可能是这个进程导致了锁等待超时。
eg: 881611 root xxxx:60646 xxx Query 2046 starting xxxx xxxx
SHOW ENGINE INNODB STATUS;
:显示InnoDB存储引擎的详细状态信息,包括当前的事务、锁情况、缓冲池状态、磁盘I/O信息等。然后通过一下两部分定位。
LATEST DETECTED DEADLOCK
会显示最新检测到的死锁信息,TRANSACTIONS"
部分会显示当前 InnoDB 引擎中的事务状态,包括事务的 ID,状态,所持有的锁,以及正在等待的锁等信息。SHOW OPEN TABLES;
:显示当前打开的表的信息,了解哪些表可能正在被锁定。
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
:显示当前的InnoDB锁情况。可以直观地查看锁的状态,需要InnoDB引擎支持。
eg: 以上面的例子为列 KILL 881611
需要注意,可能会对业务产生影响,导致数据状态不一致或者业务逻辑中断 !!!
注意 这只是允许线程等待更长的时间来获取锁,而不是解决了锁的竞争问题。还是会导致其他线程仍然在等待获取锁 !!!
[mysqld]innodb_lock_wait_timeout = 120
SHOW STATUS LIKE 'Threads_connected';
SET GLOBAL max_connections = 200;
SHOW VARIABLES LIKE 'slow_query_log';
SET GLOBAL slow_query_log = 'ON';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';
来源地址:https://blog.csdn.net/weixin_41020185/article/details/130783324
--结束END--
本文标题: MySQL:MySQLTransactionRollbackException - Lock wait timeout exceeded; try restarting transaction
本文链接: https://www.lsjlt.com/news/373366.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0