美文网首页
行锁、表锁、间隙锁、死锁

行锁、表锁、间隙锁、死锁

作者: 阔阔飞翔 | 来源:发表于2020-01-07 17:37 被阅读0次

一、行锁、表锁、间隙锁说明

https://blog.csdn.net/fy_java1995/article/details/83445201

重点:

当选中某一行时,如果是通过主键或者索引选中的,这个时候是行级锁;如果是通过其它条件选中的,这个时候行级锁会升级成表锁,其它事务无法对当前表进行更新或插入操作

二、MySQL死锁

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

三、发生死锁的3个条件:

1、>= 2个事务

2、不同方向

3、相同锁资源

解决死锁的方法

超时等待:即当两个事务互相等待时,当一个事务等待时间超过设置的阈值时,就将其回滚,另外事务继续进行。(缺点:如果回滚的事务更新了很多行,占用了较多的undo log,那么在回滚的时候花费的时间比另外一个正常执行的事务花费的时间可能还要多,就不太合适);

wait-for graph(等待图):死锁碰撞检测,是一种较为主动的死锁检测机制,要求数据库保存锁的信息链表和事务等待链表两部分信息,通过这两个部分信息构造出一张图,在每个事务请求锁并发生等待时都会判断是否存在回路,如果在图中检测到回路,就表明有死锁产生,这时候InnoDB存储引擎会选择回滚undo量最小的事务。

事务1中的SQL 1语句:

UPDATE  Table_1  SET  LockStatus = 1  WHERE  OrderId = 2233445566  AND BizId =2233445566  AND ActionType = 503   AND LockStatus = 0

根据LockStatus索引更新LockStatus值,对LockStatus索引加上排他锁。

事务2中的SQL 2语句:

UPDATE   Table_1  SET   Status =  4   WHERE   Id =543090

根据主键ID去更新表Table_1中的Status状态,这个时候会对主键索引ID加上排他锁。

原因分析:因为事务1和事务2都是行锁,互不影响运行,这时以LockStatus = 0为查询条件时,可能包含了id=543090这个条件的数据,导致两个事务互相持有对方的锁,锁得不到释放,造成死锁。

产生死锁的原因是第一条SQL语句用到的索引区分度不高,只用到了lockstatsu索引,导致5万条行记录被锁,因此解决方案就是要用区分度更高的索引,根据第一条SQL建立唯一键引:

UNIQUE KEY `UK_OrderId_BizId_ActionType` (`OrderId`,`BizId`,`ActionType`)

相关文章

  • 行锁、表锁、间隙锁、死锁

    一、行锁、表锁、间隙锁说明 https://blog.csdn.net/fy_java1995/article/d...

  • mysql锁机制

    1,数据库锁理论概述分类: 读锁、写锁。行锁,表锁,页锁。1.1 表锁:无死锁,加锁快加锁:lock tabl...

  • MySQL--锁

    MySQL 锁 锁的类型 行锁粒度最小的锁,存在死锁。 页锁粒度在行锁和表锁之间的锁。 表锁粒度较大的锁,不存在死...

  • MySQL 锁机制——必知必会

    行锁、表锁对比 开销、加锁速度、死锁、粒度、并发性能 表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概...

  • 数据库相关问题与解答

    收集常见数据库问题 锁机制介绍:行锁、表锁、排他锁、共享锁,悲观锁、乐观锁。行级锁:开销大,加锁慢;会出现死锁;锁...

  • MySQL加锁分析与死锁解读,你真的弄懂Gap锁了吗?

    共享锁与排它锁 锁粒度之 行与表 锁粒度之 间隙(Gap)3.1 何为间隙?3.2 为什么要有间隙锁?3.3 插入...

  • Mysql的锁机制

    表锁和行锁 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,...

  • MySQL中的锁和并发控制

    综述 对MySQL中并发控制所用到的机制和锁进行整理。 行锁 表锁 间隙锁 临键锁 MVCC 悲观锁 乐观锁 行锁...

  • MySQL 数据库基础

    表锁、行锁、页面锁 表级锁:每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并...

  • MySQL日记——锁机制

    MySQL的锁一般分为三种 行锁 表锁 页锁 表锁 偏向MyISAM储存引擎,开销小,加锁快;无死锁;锁定粒度大,...

网友评论

      本文标题:行锁、表锁、间隙锁、死锁

      本文链接:https://www.haomeiwen.com/subject/nuuooctx.html