MySQL 锁等待超时(Lock wait timeout exceeded)

MySQL 锁等待超时(Lock wait timeout exceeded),第1张

问题:Lock wait timeout exceededtry restarting transaction

MySQL版本:5.6.44

官方文档

意思是:InnoDB在锁等待超时过期时报告此错误。等待时间过长的语句被回滚(而不是整个事务)。如果SQL语句需要等待其他事务完成的时间更长,则可以增加 innodb_lock_wait_timeout 配置选项的值;如果太多长时间运行的事务导致锁定问题并降低繁忙系统上的并发性,则可以减少该选项的值。

锁等待超时,可能是出现了死锁,也可能有事务长时间未提交

库:information_schema

表:

查看各表信息

innodb_trx 表

innodb_locks 表

innodb_lock_waits 表

processlist 表

模拟出现死锁

准备一张只有主键的表:t_test (id)

Navicat 新建查询1

Navicat 新建查询2

检查是否锁表

查询当前正在执行的事务

查询当前出现的锁

查询锁等待对应的关系

查询等待锁的事务所执行的SQL

最后,事务2 等待锁超时报错: Lock wait timeout exceededtry restarting transaction

通过事务线程ID查找进程信息

win10 查看端口信息

mysql信号量600s超时原因是与mysql的连接被持有了4,514,485毫秒,这段持有时间内没有任何任何的交互,mysql连接一直处于等待状态,mysql有个等待超时的设置。发现wait_timeout这个等待超时时间小于这个mysql连接的持有时间。mysql连接因等待超时,mysql服务器会主动关闭该连接。而客户端并不知晓,认为连接依然有效,并试图发送请求,这时就会抛出这个连接异常信息。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6103272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存