mysql:1205-Lock wait timeout exceeded;try restarting transaction

1.现象

2.分析

使用下面sql在自带数据库的information_schema中查询,注意观察那些长时间开启事务又没完成的进程,然后根据进程的db、操作人、主机、事务开启时间和状态,来排查是什么情况导致的事务未完成(代码异常、执行时间超时等等);我这里是异步作业事务执行时间过长导致的

sql 复制代码
-- 查询事务和关联进程
select p.Id as '执行进程',p.`USER` as '执行用户',p.`HOST` as '执行进程主机',p.DB as '执行进程数据库',
t.*
from innodb_trx t
join PROCESSLIST p on t.trx_mysql_thread_id = p.ID;

3.解决

如果事务长时间没完成,能够判断出已经不可能完成了,直接杀掉开启该事务的进程,如果还能完成,则等待事务完成;同时优化代码,将长时间执行的事务分隔为多次短时间的事务.

sql 复制代码
-- 杀掉进程
kill 836703;
相关推荐
luoluoal5 小时前
基于python的小区监控图像拼接系统(源码+文档)
python·mysql·django·毕业设计·源码
stella·6 小时前
mysql的时区问题
数据库·mysql·timezone·时区
残雪飞扬8 小时前
MySQL 8.0安装
数据库·mysql
一只鹿鹿鹿8 小时前
网络信息与数据安全建设方案
大数据·运维·开发语言·网络·mysql
么么...8 小时前
深入理解数据库事务与MVCC机制
数据库·经验分享·sql·mysql
哈里谢顿10 小时前
MySQL 和 Redis搭配使用指南
redis·mysql
FourAu10 小时前
更改mysql在电脑中的存储位置
数据库·mysql
学编程就要猛11 小时前
MySQL:CRUD
数据库·sql·mysql
IT技术分享社区11 小时前
MySQL实战:自动计算字段如何让查询效率翻倍?
数据库·mysql
我就是你毛毛哥11 小时前
Linux 定时备份 MySQL 并推送 Gitee
linux·mysql