首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

结合MySQL更新流程看 undolog、redolog、binlog

全文字数 : 9k+ ⏳ 阅读时长 : 13min 关键词 : undolog、redolog、binlog开篇tip我们知道日志的作用不言而喻,无论是线上排查,亦或是性能优化,几乎都需要从日志中来获得信息作为依据...简单梳理下日志是在哪个地方写入到不同日志文件中的,undolog、redolog都是InnoDB引擎中的日志,而且都是在Buffer Pool中,而binlog在Server层中,位于每条线程中,并且每种日志在磁盘中的的归档方式和文件都是不一样的...和undolog的区别这里我们可以看出redo log和undo log之间的一些明显区别,文章开头我们也总结过,这里再回顾下更清晰!...朋友,希望本文对你有帮助~ 欢迎点赞 、收藏 、关注 三连支持一下~ 我是小许,下期见~参考:《Redis设计与实现》「MySQL高级篇」MySQL日志、事务原理 -- undolog、redolog

977161

MySQL InnoDB MVCC机制

DATA_ROLL_PTR: 指向undolog的指针 2....在MySQL中, 实际上每条记录在更新的时候都会同时记录一条回滚操作到undolog(undolog默认在mysql的data文件夹中)中....比如id=880这行记录 [表格] 执行update user set age = 12 where id = 880;后, undolog中存储update执行前的记录 更新后的记录 [表格] undolog...ReadView的时候会删除回滚日志, 即该undolog不再被需要, 但insert的undolog日志在事务结束后可以立即删除, 因为如果某个事务ID=100新增了一条记录,那么在这个事务版本之前这个记录是不存在的...会话A一开始查询不到name=update的记录, 接着会话B在第三步修改了将id=990这行记录的name修改为update, 生成了一条undolog记录, 同时也将990这行的事务id和undolog

91100

seata RM源码分析

RM模块是seata中全局事务参与者,其核心逻辑有: 启动netty客户端:会启动RM客户端与TC通信 数据源切面代理:SQL解析、分支事务注册/提交、undolog保存、分支事务状态上报 Rpc代理:...的清除操作,注意:RM侧的事务提交已经在阶段一就已经完成了,因此这里主要就是进行undolog的清除操作了。...相对于事务提交操作,事务回滚要做的事情会多一些,比如找到对应的undolog然后进行数据的恢复(这里会开启一个新的事务来完成恢复操作)。...TransactionException { DataSourceProxy dataSourceProxy = get(resourceId); try { // 找到undolog...首先判断undolog状态,然后将undolog反解析为sqlUndoLogs 逆序排列,然后遍历执行每个undolog进行undo操作 执行完毕后删除undolog,然后进行commit事务,最后返回

63310

MySQL事务隔离实现原理,多版本并发控制MVCC

DB_ROLL_PTR:7字节,回滚指针,指向这条记录的上一个版本,用于配合undolog,指向上一个旧版本。...当进行insert操作的时候,产生的undolog只在事务回滚的时候需要,并且在事务提交之后可以被立刻丢弃。...在事务2修改该行记录数据时,数据库会对该行加排他锁,然后把该行数据拷贝到undolog中,作为旧记录,即在undolog中有当前行的拷贝副本。...在事务3修改该行数据的时,数据库会对该行加排他锁,然后把该行数据拷贝到undolog中,作为旧纪录,发现该行记录已经有undolog了,那么最新的旧数据作为链表的表头,插在该行记录的undolog最前面...从上述的一系列图中,可以发现,不同事务或者相同事务的对同一记录的修改,会导致该记录的undolog生成一条记录版本线性表,即链表,undolog的链首就是最新的旧记录,链尾就是最早的旧记录。

18210

MVCC多版本并发控制

2、undologundolog被称之为回滚日志,表示在进行insert,delete,update操作的时候产生的,方便回滚的日志。...当进行insert操作的时候,产生的undolog只在事务回滚的时候需要,并且在事务提交之后可以被立刻丢弃; 当进行update和delete操作的时候,产生的undolog不仅仅在事务回滚的时候需要,...然后把该行数据拷贝到undolog中,作为 旧记录,即在undolog中有当前行的拷贝副本。...然后把该行数据拷贝到undolog中,作为旧纪录,发现该行记录已经有undolog了,那么最新的旧数据作为链表的表头,插在该行记录的undolog最前面。...从上述的一系列图中,大家可以发现,不同事务或者相同事务的对同一记录的修改,会导致该记录的undolog生成一条记录版本线性表, 即链表,undolog的链首就是最新的旧记录,链尾就是最早的旧记录。

12410

锁住余额,为何还会更新异常?

在内部实现中,与Postgres在数据行上实现多版本不同,InnoDB是在undolog中实现的,通过undolog可以找回数据的历史版本。...DB_ROLL_PTR: 回滚指针,指向 undolog。 ROW_ID:行 id,与此次无关。...MySQL 通过 DB_ROLL_PTR 找到 undolog,而 undolog 记录数据的变更。这样 MySQL 就能推导出变更之前记录内容。 查找过程如下: ?...若需要知道 V1 版本记录,首先根据当前版本 V3 的 DB_ROLL_PTR 找到 undolog,然后根据 undolog 内容,计算出上一个版本 V2。以此类推,最终找到 V1 这个版本记录。...没办法只能根据 undolog 去读取上一版本记录 (1,1000) 。这个版本记录刚好对于事务 2 可见。 若当前事务隔离级别修改成 RC,那么结果就与 RR 不同。各位读者自行分析一下。

60910

Seata AT 模式分布式事务源码分析

execute 的实现 抽象方法 doExecute 的实现 ConnectionProxy 复写的 commit 方法 执行一阶段本地事务提交 GlobalLock 的具体作用 二阶段异步删除分支 UndoLog...一阶段进行业务 SQL 执行,并通过 SQL 拦截、SQL 改写等过程生成修改数据前后的快照(Image),并作为 UndoLog 和业务修改在同一个本地事务中提交。...如果一阶段成功那么二阶段仅仅异步删除刚刚插入的 UndoLog;如果二阶段失败则通过 UndoLog 生成反向 SQL 语句回滚一阶段的数据修改。...二阶段生成反向 SQL 回滚 如果一阶段失败,则二阶段需要回滚一阶段的数据库更新操作,此时涉及到根据 UndoLog构造逆向 SQL 进行补偿。...UndoExecutorFactory 类的 getUndoExecutor 方法会根据 UndoLog 中记录的 SQLType 生成不同的 UndoExecutor 返回: ?

2.4K10

锁住余额,为何还会更新异常?

在内部实现中,与Postgres在数据行上实现多版本不同,InnoDB是在undolog中实现的,通过undolog可以找回数据的历史版本。...DB_ROLL_PTR: 回滚指针,指向 undolog。 ROW_ID:行 id,与此次无关。...MySQL 通过 DB_ROLL_PTR 找到 undolog,而 undolog 记录数据的变更。这样 MySQL 就能推导出变更之前记录内容。 查找过程如下: ?...若需要知道 V1 版本记录,首先根据当前版本 V3 的 DB_ROLL_PTR 找到 undolog,然后根据 undolog 内容,计算出上一个版本 V2。以此类推,最终找到 V1 这个版本记录。...没办法只能根据 undolog 去读取上一版本记录 (1,1000) 。这个版本记录刚好对于事务 2 可见。 若当前事务隔离级别修改成 RC,那么结果就与 RR 不同。各位读者自行分析一下。

1K20
领券