MySQL事务锁问题-Lock wait timeout exceeded
转载: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; 就是空了。
这时候系统就正常了
故障排查
- mysql都是autocommit配置mysql> select @@autocommit; +--------------+ | @@autocommit | +--------------+ | 0 | +--------------+ 1 row in set (0.00 sec)
如果是0 ,则改为1
mysql> set global autocommit=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的更多相关文章
- mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...
- MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded
java.lang.Exception: ### Error updating database. Cause: java.sql.SQLException: Lock wait timeout e ...
- 【MySQL】事务没有提交导致 锁等待Lock wait timeout exceeded异常
异常:Lock wait timeout exceeded; try restarting transaction 解决办法:(需要数据库最高权限) 执行select * from informati ...
- MySQL_事务没有提交导致 锁等待 Lock wait timeout exceeded
java.lang.Exception:### Error updating database. Cause: java.sql.SQLException: Lock wait timeout ex ...
- Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法(MySQL锁表、事物锁表的处理方法)
Java执行一个SQL查询未提交,遇到1205错误. java.lang.Exception: ### Error updating database. Cause: java.sql.SQLExc ...
- 事务没有提交导致 锁等待Lock wait timeout exceeded异常
异常:Lock wait timeout exceeded; try restarting transaction 解决办法: 执行select * from information_schema.i ...
- Mysql错误: ERROR 1205: Lock wait timeout exceeded; try restarting transaction
MySQL:innodb的事务锁,一个线程占用着,简单做法是:执行mysql命令: show full processlist; 然后找出查询语句的系统id:kill掉被锁住的线程id:kill 12 ...
- 排查MySQL事务没有提交导致 锁等待 Lock wait timeout exceeded
解决思路: select * from information_schema.innodb_trx 之后找到了一个一直没有提交的只读事务, kill 到了对应的线程后ok 了. 转载自:http:// ...
- Mysql错误: ERROR 1205: Lock wait timeout exceeded try restarting transaction解决办法
select * from information_schema.INNODB_TRX;show full processlist;//找出目前连接的列表kill ID//根据ID kill掉
随机推荐
- JavaWeb开发流程
- python学习笔记:2.python基础
4.27 01,pycharm 安装使用. 011,昨日内容回顾. 编译型: 将代码一次性全部编译成二进制,然后运行. 优点:执行效率高. 缺点 ...
- 2016/12/22 dplの课练
1.sort -nk 1 -t - 3 2.sort -nk 1 -t - 2 3.sort -nk 2 -t - 1 3./etc/passwd根据用户id的大小排序,从小到大的排序输出 sort ...
- webSocket的 原理 及 实现
websocket协议是基于Tcp的一种新的网络协议,它实现了客户端与服务器的双向通行,并允许服务端主动发送信息给客户端.WebSocket是html5中的协议. Http协议与WebSocket协议 ...
- session_id() , session_start(), $_SESSION["userId"], header("Location:homeLogin.php"); exit 如果没有登录, 就回登录页
if(!session_id()) session_start(); header("Content-type:text/html;charset=utf-8"); if (emp ...
- centos6 升级安装openssh7
1.准备工作: 查看下当前SSH版本: [root@bogon ~]# ssh -V OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 或者 [root@b ...
- Windows 2008 asp.net 配置
目录 1. 前言.. 32. 部署环境.. 32.1 服务器环境信息.. 33. 磁盘阵列配置.. 44. 安装操作系统.. 45. 安装软件. ...
- 删除单链表节点,时间复杂度为O(1)
一个编程练习,删除单链表一个节点,且时间复杂度控制在O(1)内. 1.核心操作代码如下: struct ListNode { int m_data; ListNode *m_pNext; }; voi ...
- Python 递归锁
import time from threading import Thread, Lock, RLock def f1(locA, locB): # print('xxxx') # time.sle ...
- Vue中使用mui方法
第一步 下载 下载网址:http://dev.dcloud.net.cn/mui/ui/ 点击GitHub进行下载 第二步 Vue中引入Mui 将下载好的文件解压 把文件中dist中的三个文件复制到自 ...