目录
  1. 1、Redo Log
  2. 2、Undo Log
  3. 3、MVCC例子
  4. 参考
深入了解Mysql【十四】事务的实现原理之redo和undo

事务的四大特性中,隔离性由锁实现。原子性、一致性、持久性通过数据库的Redo Log和Undo Log实现。

1、Redo Log

在前面的学习中,了解到重做日志分为两部分,一部分在缓冲池中:Redo Log Buffer,另一部分在物理磁盘:Redo Log File。
在事务提交时,会将事务所有的日志都写入重做日志文件进行持久化,其中日志既有redo log也有undo log。
redo记录的是页的物理修改操作,而undo是根据每行数据进行记录。

2、Undo Log

undo主要用于事务的回滚操作,保证事务的原子性与一致性,并提供MVCC功能。
在InnoDB中,Insert操作在事务提交之后,Undo Log会立即删除,因为新插入的数据没有历史版本;
对于Update和Delete操作,需要维护多版本信息,以实现MVCC。

3、MVCC例子

事务t1和t2同时访问数据A,t1要做更新操作,t2要做查询操作,假设t1获取了锁,t2并不会等待锁的释放,而是会去读取一个快照数据,由于历史版本数据存储在Undo页中,对数据的修改对于Undo页的读取没有影响,从而达到非一致性锁定读,提高了并发性。

对于Redo和Undo更详细的信息可以参考《MySQL运维内参》《MySQL技术内幕:InnoDB存储引擎》等书籍。

参考

MySQL · 引擎特性 · InnoDB redo log漫游
MySQL · 引擎特性 · InnoDB undo log
《MySQL技术内幕 InnoDB存储引擎 第二版》

tencent.jpg

文章作者: ClawHub
文章链接: https://www.clawhub.club/posts/2019/11/21/%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3Mysql/%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3Mysql%E3%80%90%E5%8D%81%E5%9B%9B%E3%80%91%E4%BA%8B%E5%8A%A1%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E4%B9%8Bredo%E5%92%8Cundo/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的博客
打赏
  • 微信
  • 支付宝
扫一扫关注ClawHub公众号,专注Java、技术分享、面试资源。