千家信息网

MYSQL MVCC的实现原理

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"MYSQL MVCC的实现原理",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MYSQL MVCC的实现原理"吧!MVCC 首先是为
千家信息网最后更新 2026年11月02日MYSQL MVCC的实现原理

这篇文章主要讲解了"MYSQL MVCC的实现原理",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MYSQL MVCC的实现原理"吧!

MVCC 首先是为并发而产生的(MVCC multi version Concurrency control),而因为要并发事务,使用了2PL 2段锁,下面画一个图来看看两段锁

2 Phase lock 包含两个区段,扩展和收缩,而在实际当中这个而两个阶段其实可以通过commit rollback来进行区分,在此之前都是 Growing 阶段,在这之后都就属于shrink 了。

而基于两段锁的原理,就产生最初的两种锁 S X 锁,S 锁用于读,在记录被加载S 锁的时候,是不能进行相关记录行的数据更新的,但可以添加其他S锁进行数据的读取, X 锁则是在记录更新时,不能有其他X 锁,或S锁在此记录上加锁。

而这样的锁的设置,就引起一些争论点,使用这样的方式的数据库的性能低下。那如何能在此理论下,提出一个能提升系统性能的方法,就变得重要了。

开发人员提出了,多版本控制的方法来降低由于锁的问题,而产生的性能问题,这就是 MVCC 的由来。

对于多版本的控制,来说在设计的时候回会在每行记录中增加三个隐藏的字段, DB_TRX_ID 用来记录这一行的的事务 当前使用它的事务ID , DB_ROLL_PTR 则是记录这条记录与UNDO 空间记录之间的关系,好在记录回滚的时候,映射出回滚段与记录之间的关系。

其中 DB_TRX_ID 是保留事务最新的 ID 号,而 DB_ROLL_PTR 则是指向UNDO LOG 中修改行中被修改前的信息。(这不就有两个版本了,1 新的修改的记录, 2 没被修改的记录)多版本控制仅仅在 RR , RC 两个MVCC 中进行支持。

在InnoDB多版本控制方案中,当您使用SQL语句删除一行时,它不会立即从数据库中物理删除。InnoDB只有在丢弃为删除而编写的update undo日志记录时,才会物理地删除相应的行及其索引记录。这个删除操作称为清除,它非常快,通常使用与执行删除操作的SQL语句相同的时间顺序。

从中我们可以推出,UNDO LOG 一定是要在事务commit前进行的,

1 数据提出修改

2 将数据修改前的信息刷新到 UNDO LOG

3 更新要更新的数据

4 将UNDO LOG 的信息落到磁盘中

5 BINLOG 记录

6 事务提交

注:这里未涉及 REDO LOG 以及各种BUFFER 的讨论

在多版本控制中,聚集索引和secondary INDEX 之间的数据更新是不同的,更新secondary索引列时,将删除旧的辅助索引记录,插入新记录,并最终清除删除标记的记录。二级索引记录被删除或二级索引页被update的事务更新时,InnoDB在聚集索引中查找数据库记录。在聚集索引中,检查记录的DB_TRX_ID,如果在读取事务启动后修改了记录,则从undo日志中检索记录的正确版本。

所以在多版本控制中,UNDO LOG 起到不可替代的作用,在事务未提交,中进行数据的读取是,UNDO LOG 将提供当时的记录信息,而表中的行中的隐藏字段将对多版本的控制是一个关键的设计。

同时如果一次进行的事务比较大,例如UPDATE 就要占用更大的UNDO LOG 的空间,如果更新的事务的大小,频次过多,还可能引起整体的数据性能低下,所以控制事务的大小对整体的系统的性能是至关重要的。

而要说 MVCC 最大的初衷,个人认为

1 读不影响写

2 写不影响读

是MVCC 最要实现的功能。

感谢各位的阅读,以上就是"MYSQL MVCC的实现原理"的内容了,经过本文的学习后,相信大家对MYSQL MVCC的实现原理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

事务 数据 版本 索引 控制 更新 原理 性能 两个 信息 之间 数据库 时候 问题 学习 低下 重要 一行 内容 大小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司图片 互联网科技的发展 互联网科技ppt模板 天下捷融互联网科技 互联网系的金融科技公司 湖南诚度互联网科技有限公司 哈尔滨屹滨互联网科技有限公司 米聚互联网科技南京有限公司排面 允成互联网科技有限公司融资 企晟互联网信息科技有限公司 浙南科技城互联网大厦招聘 工业互联网科技创业 普陀区互联网教育科技管理办法 湖北辰鑫科技互联网 张家口科技产业互联网平台 互联网科技职业技能培训学校 马化腾互联网科技教学 上海互联网科技园景观 互联网科技创新方面的资料 科技互联网企业在行动 互联网巨头科技公司 互联网 科技公司 互联网医疗科技 互联网高科技股票 撒么互联网科技公司 科技互联网的估值 互联网经济与金融科技 厦门比较好的科技互联网公司 深圳市优智互联网科技有限公司 亚光科技低轨卫星互联网
0