MVCC 是什么?InnoDB 是如何实现 MVCC 机制的?

MVCC 是指多版本并发控制(Multiversion Concurrency Control),是一种并发控制机制,常用于数据库系统中,用于实现事务的并发控制。它允许在同一时间多个事务对同一个数据集合进行读取操作,同时防止数据不一致 和其他并发问题。

InnoDB 是 MySQL 中最常用的存储引擎之一,它的 MVCC 实现是通过在每行记录中添加两个隐藏的列,分别记录 行的创建时间和过期时间,以此来判断事务对该行记录的可⻅性。当一个事务需要读取一行记录时,InnoDB 首先 读取这行记录的创建时间和过期时间,并根据这些信息判断该行记录是否可⻅。如果创建时间早于当前事务的开始 时间,且过期时间晚于当前事务的开始时间,那么该行记录对当前事务可⻅。

在 InnoDB 中,MVCC 主要是通过实现以下几个机制来实现的:

  1. 事务版本号:每个事务都有一个唯一的版本号,用来标识该事务的创建时间。

  2. 读取视图:每个事务在开始时都会创建一个读取视图,记录该事务开始时间和其他信息。在事务执行期间,所有读取操作都要检查该视图,以确定读取哪些版本的数据。

  3. undo日志:在事务执行期间,如果对数据进行修改,那么会先将原始数据复制一份到undo日志中。这样, 在回滚操作时就可以使用 undo 日志中的数据来还原原始数据。

  4. 快照读取:在某些情况下,事务需要读取一个数据的历史版本,而不是当前版本。这时可以使用快照读取来实现,即在读取时根据事务开始时间和 undo 日志来读取历史版本的数据。

相关推荐
A.说学逗唱的Coke2 分钟前
【数据库专题】ClickHouse 深度实战:从列式存储原理到 PB 级海量日志与可观测性分析
数据库·clickhouse·硬件架构
佳&弥20 分钟前
数据库提权
服务器·数据库·安全·web安全·网络安全
智购科技自动售货机工厂26 分钟前
2026自动售货机电机驱动芯片选型:从L298N到DRV8870的工程实践~YH
大数据·开发语言·数据库·人工智能·单片机·嵌入式硬件·scikit-learn
国科安芯36 分钟前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
Escalating_xu39 分钟前
【C++ vector 深度解析】从常用接口、扩容机制与迭代器失效到核心模拟实现
java·c++·面试
斯内普吖42 分钟前
(开源)农产品电商系统实战指南 基于 Java + SpringBoot + Vue + MySQL
java·vue.js·spring boot·mysql·开源
克里斯蒂亚诺更新1 小时前
win下如何将redis自启动
数据库·redis·缓存
青禾8371 小时前
MySQL 数据库完全指南:DDL、DML、DCL 与用户权限管理
数据库·oracle
tachibana21 小时前
大语言模型基础
数据库·人工智能·语言模型·自然语言处理·大模型·llm
小王C语言1 小时前
MySQL 事务:事务自动提交、查看/修改事务隔离级别、读未提交(RU)、读提交(RC)、可重复读(RR)、串行化
数据库·mysql