900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > mysql中输入没反应_mysql数据库插入无反应问题

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

时间:2023-07-06 22:00:35

相关推荐

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执行后即使阻塞也不会触发事物的超时自动回滚

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。