转载:https://cloud.tencent.com/developer/article/1356959

问题现象:

  接口响应时间超长,耗时几十秒才返回错误提示,后台日志中出现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;

当前出现的锁

mysql> SELECT * FROM information_schema.INNODB_LOCKs;

锁等待的对应关系

mysql> SELECT * FROM information_schema.INNODB_LOCK_waits;

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

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

3、批量删除事务表中的事务

我这里用的方法是:通过information_schema.processlist表中的连接信息生成需要处理掉的MySQL连接的语句临时文件,然后执行临时文件中生成的指令。

mysql>  select concat('KILL ',id,';') from information_schema.processlist where user='cms_bokong';
+------------------------+
| concat('KILL ',id,';') |
+------------------------+
| KILL 10508; |
| KILL 10521; |
| KILL 10297; |
+------------------------+
18 rows in set (0.00 sec)

当然结果不可能只有3个,这里我只是举例子。参考链接上是建议导出到一个文本,然后执行文本。而我是直接copy到记事本处理掉 ‘|’,粘贴到命令行执行了。都可以。

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

这时候系统就正常了

故障排查

  1. mysql都是autocommit配置mysql> select @@autocommit; +--------------+ | @@autocommit | +--------------+ | 0 | +--------------+ 1 row in set (0.00 sec)

如果是0 ,则改为1

mysql> set global autocommit=1;

  1. mysql的引擎检查,可以检查一下数据库引擎是不是InnoDB(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)show ENGINES; #检查命令 如果不是的话改为 InnoDB :

查看表使用的存储引擎

show table status from db_name where name='table_name';

修改表的存储引擎

alter table table_name engine=innodb;

MySQL事务锁问题-Lock wait timeout exceeded的更多相关文章

  1. mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决

    前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...

  2. MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded

    java.lang.Exception: ### Error updating database.  Cause: java.sql.SQLException: Lock wait timeout e ...

  3. 【MySQL】事务没有提交导致 锁等待Lock wait timeout exceeded异常

    异常:Lock wait timeout exceeded; try restarting transaction 解决办法:(需要数据库最高权限) 执行select * from informati ...

  4. MySQL_事务没有提交导致 锁等待 Lock wait timeout exceeded

    java.lang.Exception:### Error updating database.  Cause: java.sql.SQLException: Lock wait timeout ex ...

  5. Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法(MySQL锁表、事物锁表的处理方法)

    Java执行一个SQL查询未提交,遇到1205错误. java.lang.Exception: ### Error updating database.  Cause: java.sql.SQLExc ...

  6. 事务没有提交导致 锁等待Lock wait timeout exceeded异常

    异常:Lock wait timeout exceeded; try restarting transaction 解决办法: 执行select * from information_schema.i ...

  7. Mysql错误: ERROR 1205: Lock wait timeout exceeded; try restarting transaction

    MySQL:innodb的事务锁,一个线程占用着,简单做法是:执行mysql命令: show full processlist; 然后找出查询语句的系统id:kill掉被锁住的线程id:kill 12 ...

  8. 排查MySQL事务没有提交导致 锁等待 Lock wait timeout exceeded

    解决思路: select * from information_schema.innodb_trx 之后找到了一个一直没有提交的只读事务, kill 到了对应的线程后ok 了. 转载自:http:// ...

  9. Mysql错误: ERROR 1205: Lock wait timeout exceeded try restarting transaction解决办法

    select * from information_schema.INNODB_TRX;show full processlist;//找出目前连接的列表kill ID//根据ID kill掉

随机推荐

  1. eclipse中访问不了tomcat首页server Locations变灰无法编辑

    eclipse中访问不了tomcat首页server Locations变灰无法编辑 2014年07月25日 14:37:21 wuha0 阅读数:19139更多 个人分类: servlet   解决 ...

  2. Nim函数调用的几种形式

    Nim函数调用的几种形式 Nim 转载条件:如果你需要转载本文,你需要做到完整转载本文所有的内容,不得删改文内的作者名字与链接.否则拒绝转载. 关于nim的例行介绍: Nim 是一门静态编译型的系统级 ...

  3. 使用VB6读取数据库资源并发送邮件(原创)

    Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection ...

  4. 设置Linux系统的LANG变量

    设置linux系统的LANG变量 对于国内的Linux用户,经常烦恼的一个问题是:系统常常在需要显示中文的时候却显示成了乱码,而由于某些原因,需要英文界面的系统的时候,却苦于系统不能正常输入和显示中文 ...

  5. soapUI的安装及破解

    1.下载安装包 SoapUI SoapUI-Pro-x64-5.1.2.exe Protection-4.6.jar scz.key 2.安装SoapUI-Pro-x64-5.1.2.exe 3.拷贝 ...

  6. 安装activeMQ(window,linux系统)

    今天学习了activeMQ服务器,把它说成成服务器是我的理解,,呵呵,首先,说一下它的安装, 官网:http://activemq.apache.org/overview.html window下的安 ...

  7. scrum第二次冲刺

    1.本次冲刺内容 实现长大一条龙的登陆注册.    本次冲刺我们团队实现了长大一条龙的登录注册功能.我们的这个项目严格遵守MVC架构,采用前后端分离的策略.我们将登陆注册分为三层,DAO层:负责与数据 ...

  8. Java基于opencv实现图像数字识别(五)—投影法分割字符

    Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...

  9. 图的深度优先遍历(DFS)—递归算法

    实验环境:win10, DEV C++5.11 实验要求: 实现图的深度优先遍历 实验代码: #include <iostream> #define maxSize 255 #includ ...

  10. yaf twig配置

    1.安装 TWIG composer require twig/twig2.COMPOSER自动加载的引用修改 BOOTSTRAP.PHP 增加 public function _initAutolo ...