当前位置: 首页 > news >正文

mysql mvcc

MySQL MVCC (多版本并发控制) 机制详解

MVCC (Multi-Version Concurrency Control) 是 MySQL InnoDB 存储引擎实现高并发读写的核心技术,它通过数据多版本来避免读写冲突,同时保证事务的隔离性。

一、MVCC 核心原理

1. 版本链结构

InnoDB 每行记录都包含两个隐藏字段:

  • DB_TRX_ID:最近修改该行的事务ID

  • DB_ROLL_PTR:指向 undo log 的回滚指针,形成版本链

2. ReadView 机制

每个事务启动时会生成一个 ReadView,包含:

  • m_ids:当前活跃事务ID集合

  • min_trx_id:最小活跃事务ID

  • max_trx_id:预分配的下一个事务ID

  • creator_trx_id:创建该 ReadView 的事务ID

二、MVCC 工作流程

1. 查询数据时的可见性判断

对于每行数据,通过比较版本号确定是否可见:

  1. 如果 DB_TRX_ID < min_trx_id:说明数据在事务开始前已提交,可见

  2. 如果 DB_TRX_ID >= max_trx_id:说明数据在事务开始后修改,不可见

  3. 如果 min_trx_id <= DB_TRX_ID < max_trx_id

    • 如果 DB_TRX_ID 在 m_ids 中:说明事务未提交,不可见

    • 否则:事务已提交,可见

2. 不同隔离级别的实现

  • READ UNCOMMITTED:直接读取最新数据,不使用 MVCC

  • READ COMMITTED:每次查询生成新 ReadView

  • REPEATABLE READ:事务第一次查询时生成 ReadView,后续复用

  • SERIALIZABLE:退化为加锁方式,不使用 MVCC

三、MVCC 关键优势

  1. 读写不阻塞:读操作不需要等待写锁释放

  2. 非锁定读:通过版本链实现一致性读

  3. 高效回滚:利用 undo log 快速回滚到指定版本

四、MVCC 实现细节

1. undo log 作用

  • 存储数据修改前的版本

  • 用于事务回滚和 MVCC 版本链构建

  • 分为 insert undo log 和 update undo log

http://www.dtcms.com/a/262768.html

相关文章:

  • (4)pytest-fixture
  • Webpack原理剖析与实现
  • Hive SQL 实战:电商销售数据分析全流程案例
  • 【指针与结构体的使用详解】
  • nis打包(HM NIS EDIT脚本编辑器)
  • 多路转接 poll
  • UV包管理学习 - 解决Python包线上线下版本不一致的问题
  • C/C++ 使用rapidjson库 操作Json格式文件(创建、插入、解析、修改、删除)
  • 【AI时代速通QT】第四节:Windows下Qt Creator调试指南
  • 百胜软件获邀走进华为,AI实践经验分享精彩绽放
  • 设计模式之外观模式
  • Hadoop WordCount 程序实现与执行指南
  • MidJourney生成东汉末年项羽全身像提示词
  • 多线程环境下的线程安全资源与缓存池设计:ThreadSafeObject 与 CachePool 实例解析
  • 深入理解 MVCC:数据库高并发的核心引擎
  • LabVIEW键盘鼠标监测控制
  • 七天学会SpringCloud分布式微服务——06——Sentinel
  • 【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
  • 通过python+openCV实现对图片中箭头方向的判断
  • LeetCode 594. 最长和谐子序列
  • 关于 java:8. Java 内存模型与 JVM 基础
  • 汇编基础介绍——ARMv8指令集(四)
  • 【c/c++1】数据类型/指针/结构体,static/extern/makefile/文件
  • 【c/c++3】类和对象,vector容器,类继承和多态,systemd,stdboost
  • Ragflow本地部署和基于知识库的智能问答测试
  • 机器学习在智能电网中的应用:负荷预测与能源管理
  • 【鸿蒙中级】
  • 面试复盘6.0
  • 「Java案例」输出24个希腊字母
  • 深入理解 Dubbo 负载均衡:原理、源码与实践