Lock wait timeout exceeded; try restarting transaction

mysql出现死锁并获取锁超时后,会出现上面的错误。

解决步骤:

我们可以通过到information_schema 中来进行查找被锁的语句。

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

我们可以用下面三张表来查原因:

innodb_trx 当前运行的所有事务
innodb_locks 当前出现的锁
innodb_lock_waits 锁等待的对应关系


事务trx_id 为82360060494的编号被阻塞了,在等待获取锁
事务trx_id 为82360051270 已经获取了锁,并且未释放

事务trx_id 为82360060494 在等待获取S共享锁
事务trx_id 为82360051270 获取了X排他锁


请求事务request_trx_id 82360060494 在等待 blocking_trx_id 82360051270去释放锁,因为82360051270一直未释放锁,因此82360060494获取锁超时后,抛出了上面的错误。

MySQL死锁

死锁是指两个或两个以上事务在执行过程中因争抢锁资源而造成的互相等待的现象。

我出现这个的原因是通过一个方法中使用了多数据源,操作了同一条数据。
具体问题还要根据上面的分析,结合代码去找到死锁的原因。

MySQL 锁种类
MySQL InnoDB存储引擎提供了如下几种锁:

(1)共享/排他锁(S/X锁)

共享锁(S Lock):允许事务读取一行数据,多个事务可以拿到一把S锁(即读读并行);
排他锁(X Lock):允许事务删除或更新一行数据,多个事务有且只有一个事务可以拿到X锁(即写写/写读互斥);

(2)意向锁(Intention Lock)
意向锁是一种表级别的锁,意味着事务在更细的粒度上进行加锁。

意向共享锁(IS Lock):事务想要获得一张表中某几行的共享锁;
意向排他锁(IX Lock):事务想要获得一张表中某几行的排他锁;
举个例子,事务1在表1上加了S锁后,事务2想要更改某行记录,需要添加IX锁,由于不兼容,所以需要等待S锁释放;如果事务1在表1上加了IS锁,事务2添加的IX锁与IS锁兼容,就可以操作,这就实现了更细粒度的加锁。

(3)插入意向锁(Insert Intention Lock)
插入意向锁是间隙锁的一种,专门针对insert操作的。即多个事务在同一个索引、同一个范围区间内插入记录时,如果插入的位置不冲突,则不会阻塞彼此;
举个例子:在可重复读隔离级别下,对PK ID为10-20的数据进行操作:
事务1在10-20的记录中插入了一行:
insert into table value(11, xx)
事务2在10-20的记录中插入了一行:
insert into table value(12, xx)
由于两条插入的记录不冲突,所以会使用插入意向锁,且事务2不会被阻塞。

(4)自增锁(Auto-inc Locks)
自增锁是一种特殊的表级别锁,专门针对事务插入AUTO-INCREMENT类型的列。
即一个事务正在往表中插入记录时,其他事务的插入必须等待,以便第1个事务插入的行得到的主键值是连续的。
举个例子:在可重复读隔离级别下,PK ID为自增主键
表中已有主键ID为1、2、3的3条记录。
事务1插入了一行:
insert into table value(‘aa’)
得到一条(4,’aa’)的记录,未提交;

此时
事务2中插入了一行:
insert into table value(‘bb’)
这时会被阻塞,即用到了插入意向锁的概念。

(5)记录锁(Record Locks)- locks rec but not gap
记录锁是的单个行记录上的锁,会阻塞其他事务对其插入、更新、删除;

(6)间隙锁(Gap Lock)
间隙锁锁定记录的一个间隔,但不包含记录本身。
举个例子:
假如数据库已有ID为1、6两条记录,
现在想要在ID in (4,10)之间更新数据的时候,会加上间隙锁,锁住[4,5] [7,10] ,(不包含已有记录ID=5本身)
那么在更新ID=5的记录(只有一条记录)符合条件;
如果不加间隙锁,事务2有可能会在4、10之间插入一条数据,这个时候事务1再去更新,发现在(4,10)这个区间内多出了一条“幻影”数据。
间隙锁就是防止其他事务在间隔中插入数据,以导致“不可重复读”。

(7)临键锁(Next-Key Lock)= Gap Lock + Record Lock
临建锁是记录锁与间隙锁的组合,即:既包含索引记录,又包含索引区间,主要是为了解决幻读。

三张表字段说明

innodb_trx

innodb_locks


innodb_lock_waits

mysql 死锁问题 Lock wait timeout exceeded; try restarting transaction相关推荐

  1. mysql 中lock wait_应用中MYSQL 报错Lock wait timeout exceeded; try restarting transaction

    最近开发的应用开始做性能测试.在小于80用户并发的时候一切OK,并发量到100用户时,持续压5分钟.应用开始报错,并且只有1次错误,持续时间长,比如10分钟,会报3次. 日志如下: Caused by ...

  2. 【问题解决:死锁】Lock wait timeout exceeded; try restarting transaction的问题

    执行数据删除操作时一直超时并弹出Lock wait timeout exceeded; try restarting transaction错误 解决办法 1.先查看数据库的事务隔离级别 select ...

  3. mysql死锁释放时间参数_【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法...

    问题场景 问题出现环境: 1.在同一事务内先后对同一条数据进行插入和更新操作: 2.多台服务器操作同一数据库: 3.瞬时出现高并发现象: 不断的有一下异常抛出,异常信息: org.springfram ...

  4. 关于MySQL出现`lock wait timeout exceeded; try restarting transaction` 的解决方案

    关于MySQL出现lock wait timeout exceeded; try restarting transaction 的解决方案. 一.问题抛出 在做查询语句时,MySQL 抛出了这样的异常 ...

  5. 关于MySQL出现锁等待lock wait timeout exceeded; try restarting transaction 的解决方案

    关于MySQL出现lock wait timeout exceeded; try restarting transaction 的解决方案. 一.问题抛出 在做查询语句时,MySQL 抛出了这样的异常 ...

  6. mysql 锁 启动失败_关于mysql锁的错误Lock wait timeout exceeded; try restarting transaction 【求解】...

    2020-03-13 18:44:18 | INFO | http-nio-8085-exec-10 | com.newretail.hospital.controller.HAdviceContro ...

  7. 排查mysql innodb Lock wait timeout exceeded; try restarting transaction的问题

    转载自:https://www.cnblogs.com/piperck/p/6212524.html OMG写的时候崩溃了一次. 触发关注这个问题的事情是 我们在使用pt-online-schedul ...

  8. MySQL -- Lock wait timeout exceeded; try restarting transaction参数控制

    Lock wait timeout exceeded; try restarting transaction 锁等待超时..回滚事务.. 当事务1  获得锁 start TRANSACTION upd ...

  9. Lock wait timeout exceeded; try restarting transaction

    排查过程: 查看数据库 INNODB_LOCKS,未发现有死锁的记录. 查看 SHOW PROCESSLIST; 也未见异常进程: 通过Mysql的控制台,查询慢日志,也未找到有关此表的Mysql慢日 ...

最新文章

  1. 博士申请 | 美国布兰迪斯大学张初旭教授招收机器学习方向全奖博士生
  2. 《Orange’s 一个操作系统的实现》3.保护模式1----pm.inc分析
  3. echarts 柱状图 ,颜色和显示设置
  4. Confluence 6 配置索引语言
  5. linux虚拟环境tmux,关于在Linux系统中如何把tmux和vim打造成IDE的讲解
  6. hive中使用case、if:一个region统计业务(hive条件函数case、if、COALESCE语法介绍:CONDITIONAL FUNCTIONS IN HIVE)...
  7. Spring源码解析 - BeanFactory接口体系解读
  8. VMware Workstation 14 Pro 安装 Windows Server 2003(完)
  9. 不等式计算机在线使用,不等式传递性在线计算器
  10. 汇编语言之DOSBox
  11. HDU-魔咒词典(字符串hash)
  12. 学生护眼灯色温多少合适?推荐色温在4000K的暖光护眼台灯
  13. Unable to instantiate appComponentFactory
  14. 如何查看MindSpore的IR图
  15. DateTimePicker 日期时间选择器 默认当前日期和时间
  16. 什么是对冲?对冲的作用
  17. Freeline配置使用过程
  18. ubuntu 局域网传输文件
  19. RT5350 安装 读卡器驱动
  20. 北京理工大学计算机学院张教授,张志威_北京理工大学计算机学院

热门文章

  1. 论文阅读_Same Coverage, Less Bloat: Accelerating Binary-only Fuzzing with Coverage-preserving Coverage-g
  2. 特斯拉寄望中国市场拯救它,恐难成为现实
  3. 第十届蓝桥杯大赛软件类省赛 JAVA 大学 A 组
  4. 二阶振荡衰减 matlab,MATLAB下二阶系统单位阶跃响应.doc
  5. Task 3: Subword Models (附代码)(Stanford CS224N NLP with Deep Learning Winter 2019)
  6. Python开发智能语音机器人——小O同学
  7. 【Spring】ApplicationContext和beanfactory区别
  8. Java SE 学习记录06
  9. 11月获得融资的区块链企业汇总
  10. 【 AI 简报 2020930 期】NVIDIA开源C++标准库等热点新闻等你来!