Post

MySQL MVCC

是什么?

  • Multiversion concurrency control (MCC or MVCC)
  • 多版本并发控制(MCC 或 MVCC)是一种并发控制方法,通常被数据库管理系统用来提供对数据库的并发访问(select),并以编程语言来实现事务存储。

解决了什么?

  • 不加锁的情况下解决了脏读、不可重复读和快照读下的幻读问题(幻读问题最终就是使用间隙锁解决)

如何实现?

  • 隐式字段
    • DB_TRX_ID:记录改条数据修改它的事务 ID
    • DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本
  • undo_log:日志版本链
  • read-view:执行select语句时生成的视图

当前读

  • 读操作加共享锁,写操作加排他锁
  • 场景:
    • select…for update
    • update , delete , insert
  • 实现原理:
    • 基于共享锁和排他锁

快照读

  • 普通的select操作,不加共享锁
  • 场景:
    • select…
  • 实现原理:
    • undo_log
    • MVCC

redo_log(恢复日志)

  • 提高写操作效率
  • 保证事务持久性
  • 崩溃恢复(crash-safe)

undo_log(回滚日志)

  • 事务回滚
  • MVCC

bin_log(二进制日志)

  • 主从复制
  • 数据恢复

参考

  • MVCC:听说有人好奇我的底层实现:https://xie.infoq.cn/article/eff93ec47b54a5069e0bd1726
  • MySQL · 引擎特性 · InnoDB undo log 漫游 http://mysql.taobao.org/monthly/2015/04/01/
  • redo log和bin log https://blog.csdn.net/qq_40194399/article/details/120862971
  • MVCC多版本并发控制机制—包你学会 https://www.bianchengquan.com/article/231348.html
  • 彻底搞懂MySQL的redo log,binlog,undo log:https://juejin.cn/post/6987557227074846733
This post is licensed under CC BY 4.0 by the author.