mysql中输入没反应_mysql数据库插入无反应问题

情景再现:

页面点击插入数据操作无反应

问题追溯:

查看日志,sql执行语句输出,sql语句无错,报异常Lock wait timeout exceeded; try restarting transaction

解决问题:

直接数据库执行sql语句,长时间无反应,其他数据行插入成功,外键索引列为特定值时插入不成功,判断该处有锁未释放

1:查看当前的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

发现有一个事物处于运行中状态,trx_mysql_thread_id 进程id为567843

2:查看当前锁定的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

无事物被锁

3:查看当前等锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

无事物等待锁

查出死锁进程:SHOW PROCESSLIST

进程id为567843的进程运行时长Time50000多秒,一直在运行

杀掉进程 KILL 567843;

该事物结束。重新运行,成功插入

总结:

程序运行到插入数据的函数时,开启了事物,执行了sql,本来应该commit事物的,由于未知原因未提交,导致事物因为一直在等待提交命令而阻塞。当前事物锁定了外键值一直未释放,导致后续该外键值得数据因为一直等待锁释放而执行超时。

项目设置的事物超时时间是默认的-1.如果执行长时间dql事物可设置过期时间,超时会自动回滚

Spring事务超时 = 事务开始时到最后一个Statement创建时时间 + 最后一个Statement的执行时超时时间(即其queryTimeout)。

即事物开始到sql执行结束的时间,sql执行后即使阻塞也不会触发事物的超时自动回滚

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值