Innodb 之 Undo log 作用

Undo log 是 MySQL Innodb 引擎中最重要的一个组成部分,它的作用贯穿于 Innodb 两个最主要的部分:并发控制(Concurrency Control)和故障恢复(Crash Recovery)。

undo log 的作用:

  1. 事务回滚
    undo log 记录了数据修改之前的历史值。故障发生时,为了保证原子性,恢复线程执行 undo log,将数据还原到之前的状态。
  2. MVCC 多版本并发控制(Multi-Versioin Concurrency Control)
    通常知道,并发环境下,修改数据需要加写锁,写锁和任何锁都冲突。如果不加机制,任由写锁和读锁冲突,会影响读的性能。提高并发访问能力的手段之一,就是避免只读事务和写事务之间的冲突。新的写入,新增一个版本号。为每条记录保存多份历史数据,供读事务访问。而只读事务,不需要加读锁,通过 undo log 回溯到可见的历史版本,就获得一致性读,效果等同于加了读锁。Innodb 复用了 undo log 记录的历史版本,来满足 MVCC 的需求

MySQL · 引擎特性 · 庖丁解InnoDB之UNDO LOG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InnoDB 存储引擎中的 undo log 是用于实现事务的回滚和 MVCC 的重要组件。下面详细讲解 InnoDBundo log 的方方面面: 1. 文件结构:InnoDBundo log 是以回滚段(rollback segment)的形式存在。每个回滚段都对应一个独立的 undo log 文件,通常以 "ibdata" 开头,并带有一个数字标识符。这些文件保存了事务执行过程中对数据所做的修改操作,以便在事务回滚或 MVCC 版本控制时使用。 2. 写入磁盘过程:当事务执行 INSERT、UPDATE 或 DELETE 操作时,InnoDB 会将修改的数据写入内存中的缓冲池(buffer pool),同时将修改操作记录到 undo log 中。写入 undo log 的过程是顺序写入磁盘的,这种顺序写入的方式可以提高性能。在事务提交之前,对应的 undo log 记录会一直保留在内存中。 3. 事务回滚:当事务执行 ROLLBACK 操作或发生异常时,InnoDB 使用 undo log 来撤销该事务所做的修改操作。通过读取 undo log 中的记录,InnoDB 可以获得原始数据,并将其还原到事务开始之前的状态。这样可以保证数据的一致性。 4. MVCC 中的作用:在 MVCC 中,每个事务都有一个唯一的事务 ID(transaction ID)。InnoDB 使用 undo log 来实现 MVCC,通过记录事务开始之前的数据版本,在并发读取时可以提供一致性的视图。当一个事务读取数据时,如果有其他事务正在对该数据进行修改,InnoDB 可以通过 undo log 中的旧版本数据来构建一个该事务所需的一致性视图。 总的来说,InnoDBundo log 是用于实现事务回滚和 MVCC 的重要组件。它以回滚段(undo log 文件)的形式存在,记录了事务执行期间对数据的修改操作。通过 undo logInnoDB 可以回滚事务、提供一致性视图,并保证数据的一致性和持久性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值