MVCC和undo log

news2024/10/6 12:35:51

MVCC多版本并发控制

MVCC是多版本并发控制(Multi-Version Concurrency Control,简称MVCC),是MySQL中基于乐观锁理论实现隔离级别的方式,用于实现已提交读和可重复读隔离级别的实现,也经常称为多版本数据库。MVCC机制会生成一个数据请求时间点的一致性数据快照 (Snapshot), 并用这个快照来提供一定级别 (语句级或事务级) 的一致性读取。从用户的角度来看,好象是数据库可以提供同一数据的多个版本(系统版本号和事务版本号)。

MVCC多版本并发控制中,读操作可以分为两类:

快照读(snapshot read)

读的是记录的可见版本,不用加锁。如 select

当前读(current read)

读取的是记录的最新版本,并且当前读返回的记录。如insert,delete,update,select…lock in share mode/for update

MVCC:每一行记录实际上有多个版本,每个版本的记录除了数据本身之外,增加了其它字段

DB_TRX_ID:记录当前事务ID

DB_ROLL_PTR:指向undo log日志上数据的指针

已提交读:每次执行语句的时候都重新生成一次快照(Read View),每次select查询时。

可重复读:同一个事务开始的时候生成一个当前事务全局性的快照(Read View),第一次select查询时。

快照内容读取原则

1、版本未提交无法读取生成快照

2、版本已提交,但是在快照创建后提交的,无法读取

3、版本已提交,但是在快照创建前提交的,可以读取

4、当前事务内自己的更新,可以读到

已提交读和可重复读的问题

已提交读(READ-COMMITTED)和可重复读(REPETABLE-READ)的底层实现就是使用了 MVCC(多版本并发控制),其提供了并发读取方式 快照读;

innodb提供了两个读取操作:锁定读 和 非锁定读,MVCC提供了一个快照读,依赖于底层的undo log 即回滚日志

已提交读

已提交读解决了 脏读的问题,但没有解决幻读问题,是因为:

每一次select都会产生一次新的数据快照,但必须满足数据已被事务正确commit了。

但是没法解决 不可重复读,因为,每次select都会产生一次新的数据快照,其他事务更新后且已commit的数据,可实时反馈到当前事务的select中,所以解决了脏读问题。

没有解决幻读是因为每次select都会产生一次新的数据快照,其他事务增加了新的记录行并且已成功提交,导致当前事务以同样条件查询时,出现记录数的改变了。

可重复读

一个事务中只有第一次select产生快照,且只产生一次,这样后面再select都是查看第一次的快照,例如:
先设置两个会话都为可重复读级别并开始事务,然后会话2先查询产生快照

在这里插入图片描述

紧接着,会话1 修改该行记录:update user set age = 20 where id=7;

然后会话2 再次进行相同查询结果仍相同

在这里插入图片描述

这就是因为,select第二次就是用第一次select保存的快照了

正因如上所述,能够解决了不可重复的问题。同时也部分解决了幻读的问题,但是当前事务自己做的事务修改和更新数据是能被 select 出来的

undo log回滚日志主要作用

事务发生错误时回滚 rollback;

提供了MVCC的非锁定读(快照读)undo logo

在这里插入图片描述

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

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

相关文章

面向对象接口

生活中大家每天都在用 USB 接口,那么 USB 接口与我们今天要学习的接口有什 么相同点呢? 在Java程序设计中的接口 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要…则必须 能…”的思想。继承是一个"是不是&…

几款GB28181流媒体平台的详细介绍和使用整理

随着监控行业国标GB28181的应用范围越来越广泛,成熟的GB28181接入平台越来越多,本文梳理一下目前各大成熟的流媒体服务器平台及实际应用效果供各位参考。 1)NTV GBS NTV GBS是一款成熟、功能完善、产品化程度很高的GB28181服务平台,从2022年…

原点安全助力金融机构消费者个人信息保护合规

数字经济的发展进一步加速了金融业务与生活场景之间的融合,数亿民众在享受金融数字化便利服务的同时,也更容易遭受个人信息泄露、权益侵害等事件。在实际业务开展过程中,部分金融机构仍存在各种侵害消费者个人信息权益的乱象。 我国对数据安…

工作经验--产品季节性分析

产品季节性分析 1.了解季节性的重要性2.如何发现季节性产品统计方法:季节性指数法:傅里叶分析法:其他: 1.了解季节性的重要性 产品是否存在季节性变化,对于卖家来说相当重要,旺季提前备货、淡季防止库存冗余…

工业无监督缺陷检测,提升缺陷检测能力,解决缺陷样品少、不平衡等问题(二)

1. 工业缺陷检测简介 在工业生产中,质量保证是一个很重要的话题, 因此在生产中细小的缺陷需要被可靠的检出。工业异常检出旨在从正常的样本中检测异常的、有缺陷的情况。工业异常检测主要面临的挑战: 难以获取大量异常样本正常样本和异常样本差异较小异常的类型不能预先得知…

UNITY3D回合制游戏开发教程案例

UNITY3D实现回合制游戏 ,类似梦幻西游,口袋妖怪,阴阳师。 先上效果 UNITY3D 回合制游戏案例源码开发教程 普通攻击 AOE技能 游戏概述 回合制游戏是一种策略游戏,玩家需要在自己的回合内进行决策,然后等待对手的回合…

redis学习 -- 常用指令

应用场景 String :缓存,限流,计数器,分布式锁,分布式session Hash:存储y用户信息,用户主页访问量,组合查询 List:关注人时间轴列 Set:点赞,标签&…

【在人间】关于网吧的记忆

高考完的暑假当了两个月夜班的网管,挣得一台小米6,也见识了不少社会人。 乡镇网吧,店里有老虎机,挣的钱比网吧一晚上收入多得多,最狠的一次有人一下输了3000个币(一个币一块钱),半夜喊老板下楼哭爹喊娘的要…

Docker:启动,停止,删除

1.启动一个容器: docker run 可选参数 镜像名 [COMMAND] [ARG...] docker run -it ubuntu /bin/bash ,启动一个使用ubuntu的docker,并使用/bin/bash做为dcoker中执行的命令。 其中818d5a1c32ac为容器ID 在宿主机上,可以通过docker ps查看容器的状态: 启动容器时常用的可选…

程序员疯抢的 Java 面试宝典(PDF 版)限时开源

Java 面试 2023 届高校毕业生规模预计 1076 万人,同比增加 367 万人,对于 23 届的同学们来说,今年下半年大规模进行的秋招是获得全职 Offer 的最重要的途径!对于程序员来说,大家都知道校招难度相对于社招来说会有所降…

解析 HashMap 源码:深入探究核心方法的实现与原理

前言数据结构类属性构造方法核心方法阈值:tableSizeFor插入元素:put树化:treeifyBin扩容:resize获取元素:get删除元素:remove遍历元素:keySet、entrySet 方法 总结 前言 一切的源头从类注释开始…

【Java se】集合——迭代器(Iterator接口)的实现原理

目录 一、迭代器的应用——遍历集合 步骤1:通过集合获取迭代器 步骤2:使用while循环 案例展示: 二、跟踪源代码 #1. 通过集合获取迭代器 #2. 通过成员方法next( ) 获取每一个集合元素对象 #3. 通过成员方法hasNext( )判断是否进行下一次…

计算机组成原理 | 理解二进制编码

二进制的转换 二进制——> 十进制: 从右到左的第 N 位,乘上一个 2 的 N 次方,然后加起来,就变成了一个十进制数例如二进制数:0011,对应的十进制表示,就是 0 2 3 0 2 2 1 2 1 1 2 0…

阿里云斩获 4 项年度云原生技术服务优秀案例

日前,在 ICT 中国2023 高层论坛-云原生产业发展论坛上,由阿里云容器服务提供技术支持的 “数禾科技”和“智联招聘” 两大案例以及阿里云云原生 AI 套件、云原生 FinOps 成本分析套件两大产品技术方案,共同获得 2023 年度云原生应用实践先锋—…

oai核心网启动多切片自动生成方法

简介 启动一个切片需要: 核心网侧: 启动核心网yaml文件及相关配置文件(datebase conf healthscripts) 对应业务的sever (如)基站侧: 虚拟机 启动ueransim的yaml文件及相关配置 代理程序&#…

拿捏指针(一)---对指针的基本认识(初级)

文章目录 指针是什么?指针的定义指针的大小 指针类型指针有哪些类型?指针不同类型有什么意义? 野指针野指针的成因如何避免野指针? 指针运算指针 - 整数指针 - 指针指针的关系运算 二级指针 指针是什么? 指针的定义 …

DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到,要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时,提到要把减污降碳协同增效作为促…

MySQL----索引

文章目录 一、索引的概念二、索引的作用索引的副作用创建索引的依据 三、索引的分类和创建3.1普通索引创建直接索引修改表方式创建创建表的时指定索引(不推荐使用) 3.2唯一索引直接创建唯一索引修改表方式创建创建表时指定 3.3主键索引创建表的时指定修改…

2024年天津农学院专升本拟招生专业限制报考范围

天津农学院2024年升本拟招生专业及报考范围 物流管理 科 类:文史、理工 专业报考范围:不限 人力资源管理 科 类:文史、理工 专业报考范围:不限 水产养殖学 科 类: 理工 专业报考范围如…

微服务springcloud 06.feign框架,配合ribbon 负载均衡和重试,配合hystrix 降级,监控和熔断测试

feign是ribbon hystrix 的整合 01.新建 sp09-feign 项目 第一步&#xff1a; 第二步&#xff1a;选择依赖&#xff1a; pom.xml 需要添加 sp01-commons 依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…