mysql 间隙锁

mysql 默认是可重复读的隔离级别,这种默认会有幻读,幻读指的什么现象呢,就是在同一个事物中前后两次查到的结果不一致,那么mysql是怎么解决幻读的呢,这就是mvcc

mvcc

什么是mvcc呢,就是多版本并发控制,具体是通过undolog来进行实现的,先来说下事物吧,每个事务开始,都会记录当前readview,包含的就是当前进行中的事物,最大的事务id,主要就是为了处理当前事务对那些数据可见,当数据进行增加修改删除的时候,会生成对应的一条undollog,里面记录了数据的事务id,也就是通过哪个事务进行修改的来的,对应的事务id是不是对当前事务可见,如果不可见的,就顺着undolog链表向上查找,找到对当前可见的数据,这样的readview 和 undolog组成了mvcc,也就是处理了幻读的问题,新增修改删除对当前事务都不可见,这种称之为快照读,那么就还有一个当前读,也就是select for update,或者说直接修改 update table set age=18 where name =‘lisi’ 其实修改也是需要当前读的,需要先查找到对应的数据才能进行修改。

mysql 怎么处理当前读的幻读问题呢

当前读就不能走快照了,要查实际的数据,但是还不能幻读,也就是要加锁,最简单的实现就是加上表锁,这样别的请求都不能修改,但是并发粒度比较低,,性能差,mysql是怎么做的呢,采用的是gap lock,也就是间隙锁,间隙锁可以锁定记录之间的返回,比如select * from table where age=18 for update,如果age没有索引,那么就锁整个表,修改删除等操作要注意索引,如果存在索引,存在当前记录的话,会锁记录以及记录周围的间隙,如果不存在记录,就向前找到比18小的,向后找到比18大的,进行加间隙锁,间隙锁之间是不冲突的,也就是多个事务都可以加间隙锁,因为间隙锁就是为了防止对这个范围内的数据进行修改,多次间隙锁不冲突,但是,如果想要再去添加数据,那么就需要等待,如果两个事务都想添加,那么就死锁了

间隙锁影响范围内的增加删除和修改吗?

有时候听到有人会这么问,其实这个对间隙锁表述不正确,间隙锁锁的就是没有数据的范围,所以不存在修改和删除的问题,阻止插入,那么为什么有人这么问呢,因为没把间隙锁,记录锁,next-key lock详细区分,记录锁就是锁的一条记录,间隙锁加上记录锁就是next-key lock 也叫临键锁,间隙锁之间不冲突,但是记录锁之间可是冲突的,常见的修改涉及到一个范围的时候,范围内的记录会加上记录锁,中间范围会有间隙锁,这个时候范围内既不允许增加,也不允许修改和删除

间隙锁导致的死锁场景

什么情况下会间隙锁会导致死锁呢,比如两个事务同时修改一条不存在的记录,这时候会在前后范围加上间隙锁,如果再进行插入数据,那么就都需要插入锁,需要等待对方释放间隙锁,这时候就发生了死锁。

常见的避免死锁的办法

  • 对于特定场景修改的时候,可以先查询出来,再根据主键进行修改,或者插入
  • 设置事务等待锁的超时时间。当一个事务的等待时间超过该值后,就对这个事务进行回滚,于是锁就释放了,另一个事务就可以继续执行了。在 InnoDB 中,参数 innodb_lock_wait_timeout 是用来设置超时时间的,默认值时 50 秒。当发生超时后,就出现下面这个提示:

  • 开启主动死锁检测。主动死锁检测在发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect 设置为 on,表示开启这个逻辑,默认就开启。当检测到死锁后,就会出现下面这个提示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174556.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迁移学习 - 微调

什么是与训练和微调? 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先,你需要随机初始化参数,然后开始训练网络,不断调整参数,直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会…

【Python算法】算法练习(一)

❤️博客主页: iknow181 🔥系列专栏: Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 目录 1、输出n以内的质数 2、求n以内最大的m个质数的和,并打印这些质数以及它们的和 方法一 方法二…

GaussDB数据库管理系统介绍

1.GaussDB的发展 2.GaussDB的生态 内部: 云化自动化方案。通过数据库运行基础设施的云化将DBA(数据库管理员)和运维人员的日常工作 自动化。外部: 采用与数据库周边生态伙伴对接与认证的生态连接融合方案,解决开发者/DBA难获取、应用难对接等…

2023年【安全员-C证】报名考试及安全员-C证考试内容

题库来源:安全生产模拟考试一点通公众号小程序 安全员-C证报名考试根据新安全员-C证考试大纲要求,安全生产模拟考试一点通将安全员-C证模拟考试试题进行汇编,组成一套安全员-C证全真模拟考试试题,学员可通过安全员-C证考试内容全…

[UDS] --- CommunicationControl 0x28

1 0x28功能描述 根据ISO14119-1标准中所述,诊断服务28服务主要用于网络中的报文发送与接受,比如控制应用报文的发送与接收,又或是控制网络管理报文的发送与接收,以便满足一定场景下的应用需求。 2 0x28应用场景 一般而言&#…

<多线程章节八> 单例模式中的饿汉模式与懒汉模式的讲解,以及懒汉模式中容易引起的Bug

💐专栏导读 本篇文章收录于多线程,也欢迎翻阅博主的其他文章,可能也会让你有不一样的收获😄 🌷JavaSE 🍂多线程 🌾数据结构 文章目录 💐专栏导读💡饿汉模式💡…

【算法练习Day32】 斐波那契数爬楼梯使用最小花费爬楼梯

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 斐波那契数爬楼梯使用最小花…

Vue的动画与过度

一、Vue的动画效果 (一)编写CSS关键帧动画 keyframes show{from{transform: translateX(-100%);}to{transform: translateX(0px);} } (二)定义动画效果 .v-enter-active { animation: 配置项 } // 显示动画 .v-leave-active…

洛谷 P5717 三角形分类 C++代码

目录 前言 题目描述 思路点拨 优化 AC代码 AC截图 结尾 前言 马上就要突破10000浏览量了,再写一篇加加油! 图片截图时间:2023.10.25.20:23 题目描述 网址:【深基3.习8】三角形分类 - 洛谷 思路点拨 这道题是给定三条边的长度&#…

一天收入500元的货拉拉运费差项目靠谱吗?

最近的货拉拉运费差项目有点火呀!收费也不低,1680-16980的比比皆是。 这个项目去年我就在某些平台看到过,今天就跟大家详细聊聊这个项目,想入坑的不妨先看看这篇文章。 一:项目原理 有人叫它货拉拉搬砖项目&#xf…

骨传导耳机怎么佩戴,骨传导蓝牙耳机什么牌子好用

市面上的传统耳机一直以来都存在一些问题,比如长时间佩戴会导致耳朵不适,或者声音过大可能会伤害到耳膜。但是,现在有一种独特的耳机正在迅速走红,它被称为骨传导耳机,而骨传导耳机是怎么佩戴的呢,它在佩戴…

勒索病毒最新变种.locked勒索病毒来袭,如何恢复受感染的数据?

导言: 在当今数字化时代,网络威胁呈指数级增长,而.locked勒索病毒已经成为网络犯罪分子的犯罪工具之一。这种病毒以其高度破坏性和高级加密技术而著名,将用户的重要数据文件锁定,然后要求支付赎金以解锁这些文件。在本…

window安装es服务及删除

elasticsearch-service.bat install 删除es服务,先停止es服务运行,管理员cmd模式,sc delete "elasticsearch-service-x64"

gRPC初体验

一、gRPC简介 1、RPC是远程过程调用的简称,在分布式系统中,客户端可以像调用本地对象一样调用远程机器上服务端对象,用于系统的垂直拆分,常见的JAVA RPC框架有JAVA自带的RMI、基于Http的Hessian、阿里基于TCP的Dubbo、淘宝基于TC…

Kotlin中使用ViewBinding绑定控件并添加点击事件

文章目录 效果1、加入依赖2、与控件进行绑定在 Activity 中使用视图绑定 3、监听控件 效果 实现源码 class MainActivity : AppCompatActivity() {lateinit var binding:ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstan…

云安全—K8s APi Server 6443 攻击面

0x00 前言 在未授权的一文中,详细描述了k8s api中的8080端口未授权的问题,那么本篇主要来说6443端口的利用。 0x01 API连接攻击面 1.匿名用户访问 匿名开放方式:kubectl create clusterrolebinding cluster-system-anonymous --clusterro…

React Hooks 实战案例

文章目录 一、React Hooks 简介二、React Hooks 的基本用法1. 使用 useState 创建状态2. 使用 useEffect 添加副作用 三、React Hooks 的常见问题1. 循环引用问题2. 副作用问题 四、React Hooks 实战案例1. 使用 useReducer 和 Redux:2. 使用 useContext&#xff1a…

暴力递归转动态规划(十一)

题目1: 这篇帖子中有多道题,由浅入深。 arr是货币数组,其中的值都是正数。再给定一个正数aim。每个值都认为是一张货币,即便是值相同的货币也认为每一张都是不同的,返回组成aim的方法数。 例如:arr {1,1,1…

【不用开发板学习STM32】可设置电子时钟

• 实验环境 工程文件下载链接!https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247551559&idx1&sn721b9238bc58936ac41e6ad1b9988554&chksmfcfb1990cb8c9086490b11c05bc76c08da15c71caa38715a047c49d36f25a149920aee482f3e&token204641…

SAP SPAD新建打印纸张

SAP SPAD新建打印纸张 1.事务代码SPAD 2.完全管理-设备类型-页格式-显示(创建格式页) 3.按标准A4纸张为模板参考创建。同一个纸张纵向/横向各创建1次(创建格式页) 4.完全管理-设备类型-格式类型-显示(创建格式类型&#xff0…