当前位置: 首页 > news >正文

【无标题】11111

在这里插入图片描述

记录锁(Record Lock) 单行记录锁,锁住索引记录,如果没有则锁定隐式主键。
间隙锁(Gap Lock)	锁定一个范围,不包含当前行。
临键锁(Next-Key Lock) 默认行查询使用,`记录锁+间隙锁合体`,锁定一个范围,包含当前行。解决幻读(Phantom),如果是主键且唯一,会降级为记录锁。
意向锁(Intention Locks) 为了支持多粒度(表锁与行锁)的锁并存,引入意向锁,是表级锁。
插入意向锁(Insert Intention Locks) 为了插入时保证正确,范围锁的一种,与Gap锁不兼容。

在这里插入图片描述

标题死锁日志的关键词含义

记录锁(LOCK_REC_NOT_GAP): 	lock_mode X locks rec but not gap
间隙锁(LOCK_GAP):	 lock_mode X locks gap before rec
Next-key 锁(LOCK_ORNIDARY): 	lock_mode X
插入意向锁(LOCK_INSERT_INTENTION): 	lock_mode X locks gap before rec insert intention

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

锁选择

update锁什么
1)、如果更新条件没有走索引,例如执行”update from t1 set v2=0 where v2=5;” ,此时会进行全表扫描,扫表的时候,要阻止其他任何的更新操作,所以上升为表锁。

2)、如果更新条件为索引字段,但是并非唯一索引(包括主键索引),例如执行“update from t1 set v2=0 where v1=9;”

那么此时更新会使用Next-Key Lock。使用Next-Key Lock的原因:

a)、首先要保证在符合条件的记录上加上排他锁,会锁定当前非唯一索引和对应的主键索引的值;

b)、还要保证锁定的区间不能插入新的数据。

3)、如果更新条件为唯一索引,则使用Record Lock(记录锁)。

InnoDB根据唯一索引,找到相应记录,将主键索引值和唯一索引值加上记录锁。但不使用Gap Lock(间隙锁)。MySQL InnoDB 锁表与锁行

**

前面我们说的 GAP LOCK 其实是锁的属性,另外我们知道 InnoDB 常规锁模式有:S 和 X,即共享锁和排他锁。锁模式和锁属性是可以随意组合的

insert锁什么

  1. 在t1插入记录时,是不加锁的。这个时候事务t1还未提交的情况下,事务t2尝试插入的时候,发现有这条记录,t2尝试获取S锁,会判定记录上的事务id是否活跃,如果活跃的话,说明事务未结束,会帮t1把它的隐式锁提升为显式锁(X锁);

  2. 一个已提交但是未purge掉的记录会造成后续插入获取S共享锁,两个事务同时获取S锁,然后尝试获取插入意向锁,造成死锁

**

delete锁什么
MySQL DELETE 删除语句加锁分析
1.删除存在的记录:可能无gap锁
1.1在非唯一索引的情况下,删除一条存在的记录是有gap锁,锁住记录本身和记录之前的gap
1.2在唯一索引和主键的情况下删除一条存在的记录,因为都是唯一值,进行删除的时候,是不会有gap存在——精准
2.删除不存在的记录:有gap锁
2.1非唯一索引,唯一索引和主键在删除一条不存在的记录,均会在这个区间加gap锁
3.删除标记为删除的记录:有gap锁
3.1通过非唯一索引和唯一索引去删除一条标记为删除的记录的时候,都会请求该记录的行锁,同时锁住记录之前的gap

RC 情况下是没有gap锁的,除了遇到唯一键冲突的情况,如插入唯一键冲突。

相关文章:

  • go pprof 的使用
  • 类和对象 中
  • LeetCode变位词组
  • locust压测实例
  • 8.6 轻量化网络设计概述
  • 【C#】萌狼学习C#那年写的笔记汇总
  • 20个js工具函数助力高效开发
  • 软件领域中面向对象的设计模式
  • 01用户登录,登出,token等框架说明
  • 几位阿里发布这份内部MySQL性能优化法则笔记
  • java-php-python-ssm巢院小区疫情管控系统计算机毕业设计
  • Linux基础 - 系统安全(SELinux与Firewalld)
  • 学完这份“顶级”SpringCloudAlibaba笔记,微服务竟如此简单
  • Spring注解驱动开发及源码解析
  • 2.1RDB、AOF及混合持久化详解Redis持久化
  • 【前端学习】-粗谈选择器
  • 【刷算法】从上往下打印二叉树
  • ECS应用管理最佳实践
  • httpie使用详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS变量作用域
  • k8s 面向应用开发者的基础命令
  • KMP算法及优化
  • PV统计优化设计
  • SpringCloud集成分布式事务LCN (一)
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 关于springcloud Gateway中的限流
  • 基于Android乐音识别(2)
  • 简单易用的leetcode开发测试工具(npm)
  • 前端存储 - localStorage
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 实现菜单下拉伸展折叠效果demo
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (4)logging(日志模块)
  • (52)只出现一次的数字III
  • (9)目标检测_SSD的原理
  • (WSI分类)WSI分类文献小综述 2024
  • (第一天)包装对象、作用域、创建对象
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (万字长文)Spring的核心知识尽揽其中
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (译) 函数式 JS #1:简介
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)http协议
  • .Net core 6.0 升8.0
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net操作Excel出错解决
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .net实现客户区延伸至至非客户区
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @Async注解的坑,小心