Mysql的MVCC机制

MySQL的MVCC机制主要通过以下几个关键要素来工作:

数据版本与隐藏列

  • MySQL InnoDB存储引擎会在每行数据中添加几个隐藏列,用于实现MVCC。其中包括 DB_TRX_ID 列,记录最后一次修改该行数据的事务ID; DB_ROLL_PTR 列,指向该行数据的回滚段指针,通过它可以找到之前版本的数据。

事务版本号

  • 每个事务在启动时都会被分配一个唯一的事务版本号,这个版本号是递增的。事务对数据的修改会创建新的数据版本,并将事务版本号记录在 DB_TRX_ID 列中。

Read View(读视图)

  • 当事务进行读取操作时,会创建一个Read View。Read View中包含了当前系统中活跃的事务列表、最小的活跃事务ID、最大的事务ID等信息。

  • 事务在读取数据时,根据Read View中的信息来判断数据版本的可见性。如果数据版本的 DB_TRX_ID 小于Read View中的最小活跃事务ID,说明该版本是在所有活跃事务之前提交的,对当前事务可见;如果 DB_TRX_ID 大于Read View中的最大事务ID,说明该版本是在当前事务启动之后创建的,对当前事务不可见;如果 DB_TRX_ID 在活跃事务列表中,说明该版本是由活跃事务创建的,对当前事务不可见。

回滚段

  • 回滚段用于存储数据的旧版本。当事务对数据进行修改时,InnoDB会将修改前的数据复制到回滚段中,以便在需要时进行回滚操作,或者提供给其他事务根据MVCC规则进行读取。

通过这些要素的协同工作,MVCC机制使得不同事务在并发访问数据时,能够看到各自一致的数据视图,提高了数据库的并发性能,同时保证了数据的一致性和隔离性。

相关推荐
Mahir088 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
2301_769340678 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
AC赳赳老秦8 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
·醉挽清风·8 小时前
学习笔记—MySQL—库表操作
笔记·学习·mysql
灵犀学长8 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
北秋,9 小时前
PostgreSQL(Postgres)数据库基础用法 + 数字型 + 字符型 完整联合注入实战
数据库·postgresql·开源
m0_5967490910 小时前
JavaScript中手动实现一个new操作符的底层逻辑
jvm·数据库·python
多加点辣也没关系10 小时前
Redis 的安装(详细教程)
数据库·redis·缓存
数据库小学妹10 小时前
数据库连接池避坑指南:告别“连接超时”与“资源耗尽”,让系统跑得更快!
数据库·redis·sql·mysql·缓存·dba
dishugj10 小时前
HANA 数据库备份与恢复
数据库·oracle