博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lock wait timeout exceeded
阅读量:5154 次
发布时间:2019-06-13

本文共 993 字,大约阅读时间需要 3 分钟。

MySQL事务锁问题-Lock wait timeout exceeded

问题:

一次ios在请求接口响应时间超长,耗时几十秒才返回错误提示,后台日志中出现Lock wait timeout exceeded; try restarting transaction的错误信息。

场景:

  1、在同一事务内先后对同一条数据进行插入和更新操作;

  2、多台服务器操作同一数据库;

  3、瞬时出现高并发现象;

原因:

  1、在高并发的情况下,Spring事物造成数据库死锁,后续操作超时抛出异常。

  2、Mysql数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错

解决方法:

1.查看数据库当前的进程,看一下有无正在执行的慢SQL记录线程。

mysql> show  processlist;

2.查看当前的事务-当前运行的所有事务

mysql> SELECT * FROM information_schema.INNODB_TRX;

3.当前出现的锁

mysql> SELECT * FROM information_schema.INNODB_LOCKs;

4.锁等待的对应关系

mysql> SELECT * FROM information_schema.INNODB_LOCK_waits;

解释:看事务表INNODB_TRX,里面是否有正在锁定的事务线程,看看ID是否在show processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

搜索的结果是在事务表发现了很多任务,这时候最好都kill掉。

5.批量删除事务表中的事务

我这里用的方法是:kill 线程ID

kill掉以后再执行SELECT * FROM information_schema.INNODB_TRX; 就是空了。

接口就能正常的访问。

 

如有需要可以加我Q群【308742428】大家一起讨论技术。

后面会不定时为大家更新文章,敬请期待。

喜欢的朋友可以关注下。

  

  

  

转载于:https://www.cnblogs.com/dsn727455218/p/10636978.html

你可能感兴趣的文章
fidder使用
查看>>
circos的ubuntu和mac安装
查看>>
C - Heavy Transportation
查看>>
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
MongoDB快速入门学习笔记2 MongoDB的概念及简单操作
查看>>
2017.3.24上午
查看>>
[资源]开源项目汇总
查看>>
Spring学习整合hibernate(四)
查看>>
K-mean聚类算法汇聚有用信息——学习笔记
查看>>
凯撒密码、GDP格式化输出、99乘法表
查看>>
stm32打怪升级之不要碰中断
查看>>
Python-常用模块及简单的案列
查看>>
careercup-C和C++ 13.9
查看>>
数据库笔记
查看>>
JS+Flash 复制到剪切板(跨浏览器)
查看>>
java Web(1)
查看>>
C#创建windows服务并发布
查看>>
改良版twitter for iphone的照片分享程序
查看>>