【浅学Java】InnoDB存储引擎下MVCC(多版本并发控制 )

news2024/11/15 7:16:23

@TOC

1. MVCC是什么

MVCC是面试中比较常见的一个问题,那么什么是MVCC机制,它的作用是什么?

它的英文全称是 Multi-Version Concurrency Control ,也就是“多版本并发控制”的意思。在MySQL InnoDB存储引擎下,RC、RR就是基于MVCC进行事务并发控制。

RC:Read Commited,读已提交
RR:Repeatable Read,可重复读

MVCC的实现方式是:基于“数据版本”对事务并发进行访问。

2. RC、RR查询数据时的结果分析

在这里插入图片描述
对于上面的两个查询语句,RC和RR读取的数据区别:
RC:select1——>“张三”,select2——>“张小三”
RR:select1——>“张三”,select2——>“张三”
那么,这两种隔离级别时怎么实现的呢?见下面。

3. 不同隔离级别的实现方式

3.1 UNDO_LOG版本链

首先,InnoDB会创建一个UNDO_LOG版本链的,来记录某条数据各个的版本:
在这里插入图片描述

TRX_ID:完成数据操作的事务编号
DB_ROLL_PTR:指向上一版本的数据信息

3.2 ReadView

“快照读” 就是最普通的Select查询SQL语句。

“当前读” 指代执行以下查询语句时进行数据读取的方式:

insert,update,delete
select … for updata
select … lock in share mode

ReadView是 “快照读” SQL执行MVCC提取数据的依据,它是一个数据结构,包含4个字段:
在这里插入图片描述

3.3 RC的实现方式

两次次查询时,都会生成一个新的ReadView,来实现读已提交
在这里插入图片描述
然后根据ReadView判断那个版本的数据符合要求
在这里插入图片描述
第二个ReadView同理。

3.4 RR的实现方式

两次查询时,第二个会沿用上一个 ReadView,从而解决不可重复读的问题。
在这里插入图片描述
然后根据ReadView判断那个版本的数据符合要求
在这里插入图片描述
由于在RR中,ReadView是复用的,所以两次读取的数据一样。

3.5 RR隔离级别下,使用MVCC可以避免幻读吗

答案是:能,但不完全能!

连续多次 快照读 ,ReadView会产生复用,没有幻读问题。但是:当两次快照读之间存在当前读,ReadView就会重新生成,导致幻读。

在这里插入图片描述

4. MVCC的特点

  1. 允许多个版本同时存在,并发执行。
  2. 不依赖锁机制,性能更高。
  3. 只在读已提交和可重复读的事务隔离级别下使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DBeaver 超级详细的安装与使用

一、下载DBeaver DBeaver是一种通用数据库管理工具,适用于需要以专业方式使用数据的每个人;适用于开发人员,数据库管理员,分析师和所有需要使用数据库的人员的免费(DBeaver Community) 的多平台数据库工具。 DBeaver支持80多个数据…

Redis学习(四):三种特殊类型及常用操作

geospatial (地理位置) 查询经纬度网站 添加位置GEOADD 两极无法直接添加,我们一般会下载城市数据,通过java程序导入 可以看到这个命令也支持一次性添加多个。 获取位置GEOPOS 获取两点之间距离 GEODIST 默认单位是m&#xff0c…

MySQL面试题-锁相关

目录 1.MySQL 锁的类型有哪些呢? 2.如何使用全局锁 3.如果要全库只读,为什么不使用set global readonlytrue的方式? 4.表级锁和行级锁有什么区别? 5.行级锁的使用有什么注意事项? 6.InnoDB 有哪几类行锁&#xff…

上海亚商投顾:沪指震荡调整 酒店等消费股逆势活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪沪指今日震荡盘整,创业板指V型反弹,上证50跌超1%,保险、银行、券商等金融股下挫。…

Peppol的发展史和基本框架

Peppol(Pan-European Public Procurement Online)是欧洲区域内的一个跨境公共采购电子商务平台试点项目,由欧盟委员会和Peppol联盟成员国共同资助建立,旨在通过制定标准化框架,推动欧盟成员国在公共采购相关的电子目录…

如何优化棋牌游戏服务器网络带宽

随着在线棋牌游戏的普及,如何提升游戏服务器的性能成为了一个重要的话题。高性能的独立服务器可以保证游戏的稳定性和流畅度,提高玩家的游戏体验,从而带来更多的收益。其中,优化网络带宽是保证棋牌游戏服务器稳定性和流畅度的关键…

给大家介绍几个数据分析,数据可视化的网站合集

对于初学者和进阶者准备了10让人眼前一亮的网站,可以说是很全了,建议收藏~ 一、数据来源 1、艾瑞数据 http://index.iresearch.com.cn/ 该网站免费公开的部分可以提供一些简单的APP使用数据以及人群、区域等分析。 2、CNNIC中国互联网络信息中心 http…

了解RET的开关特性

了解RET的开关特性 可通过基极电流开启或关闭双极结型晶体管(BJT)。但是,由于基极-发射极二极管两端的压降在很大程度上取决于温度,因而在许多应用中,需要一个串联电阻将基极电流保持在所需水平,从而确保BJT稳定安全地工作。阅读…

叠氮试剂943858-70-6,Azidobutyric acid NHS ester,叠氮-C3-活性酯

1、试剂基团反应特点(Reagent group reaction characteristics):Azidobutyric acid NHS ester具有叠氮化物和NHS酯端基。西安凯新生物科技有限公司供应的叠氮化物可以与炔烃、DBCO和BCN进行铜催化的点击化学反应。NHS酯可以与胺基反应&#x…

redis zset

zadd stu:1 100 math 99 english 98 history : 添加stu:1 科目 分数zrange user_rank 0 -1 withscores : 从小到大遍历zrevrange user_rank 0 -1 withscores : 从大到小遍历zremrangebyscore user_rank 0 50 : 删除分数 0 到 50 的zremrangebyrank user_rank 0 1: 删除 0 到1 名…

开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾

作者:孙健波、曾庆国 点击查看:「开源人说」第五期《KubeVela:一场向应用交付标准的冲锋》 2023 年 2 月,**KubeVela [ 1] ** 经过全体 ToC 投票成功进入 CNCF Incubation,是云原生领域首个晋级孵化的面向应用的交付…

35岁测试人该何去何从?10年工作经验的我,只不过是一年的工作经验用了10年......

如果到了这个年龄,还是初级测试,或者只会一些简单的自动化测试,那么真的是不好干了。 35的年龄,企业对员工是有另一层面的考量。 简单来说,就是年龄上去了,能力也要上去,要么是技术专家&#…

复习 Kotlin 从小白到大牛 第二版 笔记要点

4.2.2 常量和只读变量 常量和只读变量一旦初始化就不能再被修改。在kotlin中,声明常量是在标识符的前面加上val或const val 关键字。 1. val 声明的是运行时变量,在运行时进行初始化 2.const val 声明的是编译时常量,在编译时初始化 val …

【springmvc】10.拦截器

拦截器 1、拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor Component public class FirstInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, …

mysql5.7.33安装配置教程【保姆级安装教程】

MySQL5.7.33安装教程 1、官方网站下载 点击这里跳转页面下载 1.1、看下你是什么系统,系统是64位还是32位 2、解压到D盘跟路径或者其下面纯英文路径 2.1、可见它没有data、log等文件夹,不需手动添加(下面执行命令自动初始化)!! …

如何安装python

windows安装 下载安装包 登录python官网 https://www.python.org/ 点击downloads 置顶下载的是最新的python版本 如果想下载指定版本往下翻找 安装程序 点击即可下载,然后打开下载的exe程序 勾选添加pythonexec到path,也就是添加到环境变量 使用a…

Vue2.0开发之——购物车案例-Footer组件封装-计算商品的总价格(51)

一 概述 App.vue中计算勾选商品的总价格定义子组件Footer中的商品总价格将App.vue中商品的总价格传递给Footer显示 二 App.vue中计算勾选商品的总价格 2.1 商品总价格的计算逻辑 所有勾选商品的价格*数量 2.2 App.vue中通过计算属性计算总价格 通过计算属性计算总价格 co…

esp8266WiFi模块通过MQTT连接华为云

esp8266WiFi模块通过MQTT连接华为云总结:一、 MQTT透传AT固件烧录二、 串口调试2.1 设置模块为STA模式2.2 连接WiFi2.3 设置MQTT的登陆用户名与密码2.4 设置MQTT的ClientID2.5 设置MQTT接入地址2.6 订阅设备属性上报的主题2.7 上传数据2.8 平台下发命令2.9 华为云物…

网络编程学习笔记(1)--TCP/IP协议基础

目录 全称 定义 分层结构 端到端的数据传输 ​编辑 举个栗子——浏览网页 应用层 传输层 TCP UDP 网络层 IP协议 特点 IP地址 网络掩码 ARP协议 PARP协议 ICMP协议 数据链路层 名词解释 数据段 数据报 数据包 数据帧 比特流 全称 Transmission Contro…

关于进制的转换

将n进制转化为m进制一般,我们是通过位值定理来将n进制转化为10进制;然后对整数进行辗转相除来得到m进制整数void find(int x){//integer; w0;while(sum>0){ //先除为低; t[w]q[sum%m];w;sum/m;}markw; }for(int ik-1,j0;i>0;i--,j){//i…