【MVCC、Undolog、Redolog】

binlog redolog undolog 1、二进制日志(Binlog)Binlog主要用于MySQL中的复制它包括表示对数据库进行的修改的SQL语句或原始二进制数据2、重做日志(Redo Log)重做日志是事务日志的一部分,用于崩溃恢复和确保数据持久性记录了一个事务修改了那些磁盘,分别修改了那些字段那些值信息update 可能更改了多个磁盘区域的数据,数据刷到磁盘的每个扇区里无法保证原子性3、撤销日志(Undo Log)撤销日志用于存储事务修改的数据的先前图像,使回滚成为可能,确保事务一致性。 阅读详情

目录

前言

一、MVCC是什么?

1.MVCC实现三个要素

二、Undolog

三、Redolog

总结



前言

MVCC与Undolog、Redolog这几种曾让我很困惑,最近看了好多文章,结合自己理解,记录下来,好记性不如烂笔头。


提示:以下是本篇文章正文内容,下面案例可供参考

一、MVCC是什么?

MVCC(Multiversion Concurrency Control),即多版本并发控制技术,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。

个人理解:当前事务读取时,不必加锁,根据规则读取可以显示的版本记录,也就是快照读。

1.MVCC实现三个要素

  隐藏字段、undolog、readvidw

- 隐藏字段

每一行数据中有创建者自己设置的字段,还有mysql自动给增加的隐藏字段,主要是DATA_TRX_ID(事务id)和DATA_ROLL_PTR(旧版本undolog指针)

idnameageDATA_TRX_IDDATA_ROLL_PTR
1小明1830x123fff
2小刚2020x434fff

DATA_TRX_ID:指的是当前记录的事务id

DATA_ROLL_PTR:指向undolog的上一版本的地址

- undolog 

undolog会记录事务前老版本数据,然后行记录中回滚指针会指向老版本位置,如此形成一条版本链。因此可以利用undo log实现回滚,保证原子性,同时用于实现MVCC版本链。

个人理解:数据操作时,会将之前记录存入到undolog里,然后用指针进行连接起来的一个链表,这样可以保证事务失败时可以进行回滚,保证事务的原子性,还有可以通过事务id根据算法找到当前可以读的版本,也就是快照读。

比如:数据更新,将age从18变成20,旧记录就会存入undolog,存储的地址为0xffff,事务id会新增,多个版本会以链表进行存入undolog日志中。

 - readview

前面提到的判断某一个快照读能读到哪些版本,按照某种算法,这个readView就是该算法的关键。有以下几个变量。

  • m_ids:表示在生成ReadView时当前系统中活跃的读写事务的事务id列表(未提交的事务)。

  • min_trx_id:表示在生成ReadView时当前系统中活跃的读写事务中最小的事务id,也就是m_ids中的最小值。

  • max_trx_id:表示生成ReadView时系统中应该分配给下一个事务的id值。

    小贴士: 注意max_trx_id并不是m_ids中的最大值,事务id是递增分配的。比方说现在有id为1,2,3这三个事务,之后id为3的事务提交了。那么一个新的读事务在生成ReadView时,m_ids就包括1和2,min_trx_id的值就是1,max_trx_id的值就是4。

  • creator_trx_id:表示生成该ReadView的事务的事务id

具体算法:

               

 参考连接:MVCC ReadView介绍 - IUNI_JM - 博客园

二、Undolog

详见上面

三、Redolog

MySQL作为一个存储系统,为了保证数据的可靠性,最终得落盘。但是,又为了数据写入的速度,需要引入基于内存的"缓冲池"。既然数据是先缓存在缓冲池中,然后再以某种方式刷新到磁盘,那么就存在因宕机导致的缓冲池中的数据丢失,为了解决这种情况下的数据丢失问题,引入了redo log。保证了数据的持久性

redolog的大小是固定的,在mysql中可以通过修改配置参数innodb_log_files_in_group和innodb_log_file_size配置日志文件数量和每个日志文件大小,redolog采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。


write pos->checkpoint之间的部分是redo log空着的部分,用于记录新的记录,

checkpoint->write pos之间是redo log待落盘的数据修改记录

参考连接:mysql日志系统之redo log和bin log - 简书


总结

以上是我对这三者的一个学习的记录,多写一点可能更熟悉一点。

53 理解MVCC机制的前奏:undo log版本链是个什么东西?l.pdf 立即下载

相关推荐

外贸英文函电第三版张梅英课后习题答案解析

我参加了一些外贸模拟竞赛,将所学知识运用到实际工作中,取得了不错的成绩。此外,我还积极参与了一些外贸实践活动,如参加实习、担任志愿者等,从中积累更多的经验。在这个过程中,我逐渐摸索出了一套适合自己的学习方法,不仅提高了学习效果,还增强了自信心。通过学习这本书,我们可以提高自己在外贸领域的沟通能力,更好地应对未来的工作挑战。在学习这本书的过程中,我遇到了一些困难,比如对某些专业术语的理解不够透彻,对信件的结构和格式掌握不够熟练。出版社: 高等教育出版社。上传者: ʚ河西撒手没ɞ。

weixin_58833001的博客 1427

MVCC和undo log

没有解决幻读是因为每次select都会产生一次新的数据快照,其他事务增加了新的记录行并且已成功提交,导致当前事务以同样条件查询时,出现记录数的改变了。理论实现隔离级别的方式,用于实现已提交读和可重复读隔离级别的实现,也经常称为多版本数据库。提供了两个读取操作:锁定读 和 非锁定读,MVCC提供了一个快照读,依赖于底层的undo log 即回滚日志。MVCC:每一行记录实际上有多个版本,每个版本的记录除了数据本身之外,增加了其它字段。,可实时反馈到当前事务的select中,所以解决了脏读问题。

qq_42120843的博客 1199

win11本地部署openclaw实操第5集-X11图形化界面搭建,让WSL2“看见”世界

本文介绍了在WSL2中实现图形界面(GUI)的方法。由于WSL2默认没有图形界面,需要使用X11服务器作为"翻译显示器",将Linux程序的图形指令渲染到Windows窗口中。推荐使用VcXsrv作为X11服务器,详细说明了其安装和配置步骤,包括选择"One large window"显示模式、禁用访问控制等关键设置。随后在Ubuntu中安装轻量级xfce4桌面环境,并通过设置DISPLAY环境变量将图形输出指向VcXsrv。最终通过startxfce4命令成功在Vc

weixin_44626085的博客 811

MySQL的undo log 与MVCC

MVCC(Multi Version Concurrency Control)被称为多版本控制,是指在数据库中为了实现高并发的数据访问,对数据进行多版本处理,并通过版本链保证事务能看到自己应该看到的数据版本。 InnoDB 的**行数据有多个版本**,每个数据版本有自己的 row trx_id,每个事务或者语句有自己的一致性视图。普通查询语句是一致性读(快照读),一致性读会根据 row trx_id 和一致性视图确定数据版本的可见性。

他叫阿来 2491

数字蓝牙功放

数字蓝牙功放(TPA3110+BK8000L),基于D类数字功放芯片TPA3116蓝牙功放,HIFI级带滤波15Wx2蓝牙数字功放,支持有线和蓝牙两种音源输入

runweipa的博客 1420

ComfyUI面部修复FaceDetailer保姆级教程:从模型选择到参数调优全解析

本文提供ComfyUI面部修复FaceDetailer的保姆级教程,深度解析从模型选择到参数调优的全过程。针对常见的五官模糊、肤色不均等问题,详细对比了BBox与Segm检测器的优劣,并给出SD1.5与SDXL模型的核心参数联动策略与实战方案,帮助用户精准掌控AI绘画中的面部修复效果。

weixin_29073241的博客 472

【第十二章 MVCC(多版本并发控制),隐藏字段,undolog(版本链),readview,原理分析(RC,RR)】

第十二章 MVCC(多版本并发控制),隐藏字段,undolog(版本链),readview,原理分析(RC,RR)

qq_43742813的博客 786

ArcGIS与地理加权回归GWR【一】

因此,在实际问题研究中我们经常发现回归参数在不同地理位置上往往表现为不同,也就是说回归参数随地理位置变化,这时如果仍然采用全局空间回归模型(全局假设β是不会变得),得到的回归参数估计将是回归参数在整个研究区域内的平均值,如上所说某一个因素在ABC等不同的地理位置对房价的影响是不同的,假如采用全局空间回归模型,便忽略了数据的空间位置属性,只反映平均意义下因变量与自变量的相关关系,而不能有效反映回归关系的空间非平稳性的特征。当自变量为1个时,是一元线性回归,自变量为2个及以上时,称为多元线性回归。

JData_Engineer的博客 1375

mysql的undo log和mvcc

mysql的undo log和mvcc

m0_72615942的博客 1102

基于Simulink的永磁同步电机容错控制(缺相容错)

本文基于Simulink平台,详细介绍了永磁同步电机(PMSM)缺相容错控制的仿真实现方法。针对逆变器开路故障导致的缺相问题,提出"检测-重构-补偿"三阶段控制策略:采用电流阈值法快速检测故障(<5ms),重构αβ坐标系实现两相矢量控制,并通过谐波电流注入抑制转矩脉动(<8%)。仿真结果表明,该方法能有效维持故障后电机运行,转速波动<3%,满足电动汽车等关键应用的可靠性需求。文章包含完整的Simulink建模步骤、MATLAB函数代码及参数设置,为工程实践提供了可复现的

xiaoheshang_123的博客 147

基于STM32的智能鞋柜系统设计与实现

摘要:本文设计并实现了一种基于STM32F103C8T6单片机的智能鞋柜系统。该系统通过DHT11温湿度传感器、PM2.5粉尘传感器和MQ-135空气质量传感器构建多维度环境监测网络,结合光电红外传感器和光敏传感器实现柜门状态识别与智能照明。系统采用分层控制策略,当温度低于15℃或湿度高于65%时自动启动加热和通风,PM2.5超标时启动通风,污染物浓度升高时激活紫外线杀菌。创新性地实现了柜门状态与紫外线消毒的双保险互锁机制,确保使用安全。测试结果表明,系统温湿度控制精度达±0.4℃/±2.0%RH,PM2.

3254968421的博客 253

redolog,binlog,undolog与mvcc

redolog,binlog,undolog与mvcc redoLog redo log是固定大小的。比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写, 有了redo log ,即使数据库异常重启,提交记录也不会丢失——crash-safe redoLog何时写入 首先我们先明确一下InnoDB的修改数据的基本流程,当我们想要修改DB上某一行数据的时候,InnoDB是把数据从磁盘读取到内存的缓冲池上进行修改。这个

qq_37436172的博客 478

学Simulink——基于直流电机的建模与控制场景实例:他励直流电机的起动与制动过程仿真

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

xiaoheshang_123的博客 228

MYSQL的redolog 、binlog、undolog以及MVCC

目录前置知识BinlogRedologundologMVCC 前置知识 重要概念: 逻辑日志:可以简单的理解为记录的是SQL语句 物理日志:记录的是数据的实际变更 Crash-safe:崩溃安全,数据库在遇到崩溃、断电等极端情况,可以恢复内存尚未刷新到磁盘的数据。 WAL:write-ahead logging,先写日志,再写磁盘。 Innodb要对数据的更新时,先将数据加载到内存的Buffer pool中,对Buffer pool中的数据进行更新,最后找合适的时间的刷新到磁盘。如果这时候遇到断电crash

陈颜的博客 1722

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大厂面试题MySQL解析:MVCC、Redolog、Undolog与Binlog的区别

本文对比分析了MySQL四大关键日志机制:MVCC、Redolog、Undolog和Binlog。MVCC通过多版本控制实现事务隔离,避免锁竞争;Redolog记录事务修改确保持久性;Undolog存储修改前数据支持事务回滚;Binlog记录SQL操作用于备份和主从复制。四者分别侧重并发控制(隔离性)、崩溃恢复(持久性)、事务回滚(原子性)和数据库复制恢复功能,共同保障MySQL的数据一致性和可靠性。理解这些机制的差异与协同作用,对数据库性能优化和故障处理至关重要。

qq_33665793的博客 1545

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mysql 的读取流程 bufferpool redolog undolog mvcc流程原理 lru链表

MySQL的读取流程涉及多个组件,其中最重要的是Buffer Pool,但Redo Log、Undo Log、MVCC(多版本并发控制)也起着重要作用,而LRU链表和空闲链表则与Buffer Pool的内存管理有关。

vmaps的博客 1030

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MYSQL之redolog、undolog、binlog以及MVCC原理

MYSQL之redolog、undolog、binlog以及MVCC原理

qq_40223516的博客 1514

mysql事务,undolog,binlog,redolog,mvcc总结

~ 如有错误 恳请指正 1.什么是事务?事务特点以及开启与提交演示 把需要保证原子性、隔离性、一致性和持久性的一个或多个数据库操作称之为一个事务 事务的特点 -- 原子性 Atomicity -- 要么都成功 要么都失败 -- 隔离性 Isolation -- A事务在修改某条记录时候(也可以理解为状态转换,如扣钱,加钱等) 不会影响B事...

my的博客 269

Mysql事务笔记,事务原理,MVCC,redolog,undolog,

学习笔记经供参考事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作默认是自动提交1 是自动提交 0 是手动提交COMMIT;ROLLBACK;当设置成手动提交之后,执行完事务需要手动提交,输入commit提交才会产生影响。执行失败输入rollback则可以回滚数据,以确保数据的完整性一致性还有一种方式可以在不修改事务提交方式的基础上进行事务控制手动开启事务进行控制。

weixin_65950986的博客 986

MySQL 技术浅析(聚簇索引、UndoLog、RedoLog、MVCC)

InnoDB 中,聚簇索引的叶子节点直接存储,数据按主键值物理排序存储。

hzspace 821

003_Mysql之事务详解redo log、undolog 和 MVCC

1、不管是redo log 还是 undo log ,都需要在事务提交时写入磁盘文件。不同的加了Log buffer 缓存区,可以将随机读写变为顺序读写。

qq_32057039的博客 1055

MySQL 的 binglog、redolog、undolog

我们在每个修改的地方都记录一条对应的 redo 日志显然是不现实的,因此实现方式是用时间换空间,我们在数据库崩了之后用日志还原数据时,在执行这条日志之前,数据库应该是一个一致性状态,我们用对应的参数,执行固定的步骤,修改对应的数据。1,MySQL 就是通过 undolog 回滚日志来保证事务原子性的,在异常发生时,对已经执行的操作进行回滚,回滚日志会先于数据持久化到磁盘上(因为它记录的数据比较少,所以持久化的速度快),当用户再次启动数据库的时候,数据库能够通过查询回滚日志来回滚将之前未完成的事务。

sekever的博客 4045

事务原理--redolog和undolog

只有innoDB支持事务。redolog和undolog都只有innoDB才有。

693

MySQL中Binlog Redolog Undolog区别?

通过UndoLog,数据库可以在事务回滚或并发读取时,将数据恢复到事务开始之前的状态,以保证事务的原子性和一致性,同时支持数据库的并发读取操作。它记录了数据库引擎对数据进行的修改操作,以确保即使在数据库崩溃或断电的情况下,也能够重新执行事务的修改操作,从而保证了事务的持久性和数据的一致性。Undo记录中记录了修改前的数据值、修改后的数据值以及撤销操作的详细信息。如果数据库发生崩溃或断电,数据库引擎可以通过RedoLog中的日志记录重新执行事务的修改操作,将数据库恢复到崩溃之前的状态,保证数据的一致性。

u013257321的博客 1083

MySQL事务,MVCC,undo log,redo log——最全总结!

目录 redo log 与 undo log介绍 1. redo log,什么是redo log? redo log 有什么作用? 2.undo log,什么是undo log? undo log 有什么作用? mysql锁技术以及MVCC基础 2. MVCC基础 事务的实现 总结 前言:最近学习了关于mysql的事务机制,然后做个总结! 事务想要做到什么效果? 按我理解,无非是要做到可靠性以及并发处理 可靠性:数据库要保证当insert或update操作时抛异常或者数据库..

zhangkaixuan456的博客 2056

MySQL日志——undolog

比如当 delete 一条记录时,undo log 中会把记录中的内容都记下来,然后执行回滚操作的时候,就读取 undo log 里的数据,然后进行 insert 操作。,也就是在事务提交之前,可以恢复到事务开始前的数据库状态,相当于已经执行的事务操作没有发生过一样,这是怎么做到的?了解redis的朋友都知道redis的日志是为了实现数据的持久化,而mysql将数据存储在磁盘文件,没有持久化的问题,为什么还需要日志呢?,但数据库的状态为当前状态,需要记录事务开始前的数据库状态,以便进行回滚恢复。

欢迎指正、交流 3471
上一篇: git回退版本
下一篇: Tomcat源码分析
sun_code
博客等级 码龄12年 6粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值