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

MySQL 中的 MVCC 是什么?

MySQL 中的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是一种用于实现高并发读写操作的机制,它通过维护数据的多个版本来解决读写冲突,从而在保证事务隔离性的同时,减少锁的使用,提升数据库的并发性能。


MVCC 的核心原理

  1. 数据版本化

    • 每当一个事务修改数据时,InnoDB 存储引擎不会直接覆盖原始数据,而是生成一个新版本的数据,并将旧版本保留在回滚段(Undo Log)中。
    • 每个数据行会隐式添加三个字段:
      • DB_TRX_ID:记录最后修改该行的事务 ID。
      • DB_ROLL_PTR:指向回滚段中旧版本数据的指针(形成一个版本链)。
      • DB_ROW_ID:隐式自增主键(如果表没有显式主键)。
  2. 一致性视图(Read View)

    • 当事务开始时,InnoDB 会生成一个一致性视图(Read View),记录当前所有活跃事务的最小 ID(up_limit_id)和最大 ID(low_limit_id)。
    • 事务在查询数据时,会通过 Read View 判断某个数据版本是否对当前事务可见:
      • 如果数据的 DB_TRX_ID < up_limit_id(即修改该数据的事务已提交),则可见。
      • 如果 DB_TRX_ID >= low_limit_id(即修改该数据的事务是当前事务之后启动的),则不可见。
      • 如果 DB_TRX_ID[up_limit_id, low_limit_id) 之间,则需进一步判断该事务是否已提交。
  3. 事务隔离级别的实现

    • READ COMMITTED(RC):每个查询都会生成新的 Read View,因此可能看到其他事务已提交的修改。
    • REPEATABLE READ(RR):事务内所有查询共享同一个 Read View,因此多次查询结果一致(可重复读)。

MVCC 解决的核心问题

  1. 读写不阻塞

    • 写操作(如 UPDATEDELETE)会生成新版本数据,读操作无需等待写锁释放即可读取旧版本数据,从而避免读写冲突。
  2. 减少锁竞争

    • READ COMMITTEDREPEATABLE READ 隔离级别下,MVCC 大幅降低了对共享锁(S Lock)和排他锁(X Lock)的需求,提升了并发性能。
  3. 实现事务隔离性

    • 通过版本链和 Read View 机制,确保事务只能看到已提交的数据或自己修改的数据,满足不同隔离级别的要求。

MVCC 的优点

  1. 高并发性能

    • 读写操作可以并发执行,无需频繁等待锁,显著提升了数据库的吞吐量。
  2. 降低死锁风险

    • 由于减少了锁的使用,事务之间因锁竞争而死锁的概率降低。
  3. 一致性的读操作

    • REPEATABLE READ 隔离级别下,事务可以多次读取同一数据,得到一致的结果(可重复读)。

MVCC 的局限性

  1. 版本链开销

    • 频繁的更新操作会导致版本链过长,增加内存和磁盘 I/O 开销。
  2. 长事务问题

    • 长事务会长时间持有旧版本数据,导致回滚段膨胀,影响查询性能(需遍历更长的版本链)。
  3. 仅支持特定隔离级别

    • SERIALIZABLE 隔离级别下,MVCC 会退化为锁机制,性能下降。

总结

MVCC 是 MySQL InnoDB 存储引擎的核心特性之一,它通过数据版本化和一致性视图机制,在保证事务隔离性的同时,实现了高并发的读写操作。尽管 MVCC 存在一些局限性(如版本链开销和长事务问题),但在大多数场景下,它仍然是提升数据库并发性能的关键技术。

我正在程序员刷题神器面试鸭上高效准备面试,9000+ 高频面试真题、800 万字优质题解,覆盖主流编程方向,跟我一起刷原题、过面试:点击进入

http://www.xdnf.cn/news/4409.html

相关文章:

  • SRAM详解
  • vscode 安装插件
  • 软件开发模型介绍
  • MATLAB制作直方图
  • 【25软考网工】第五章(8)路由协议RIP、OSPF
  • QT聊天项目DAY09
  • 【神经网络与深度学习】VAE 中的先验分布指的是什么
  • 嵌入式音视频通话EasyRTC基于WebRTC技术驱动智能带屏音箱:开启智能交互新体验
  • MySQL从入门到精通(三):MySQL数据类型、SQL语言—DDL
  • 老年综合评估实训室虚拟仿真建设的关键技术与发展路径
  • 【论文阅读】Towards Stable Backdoor Purification through Feature Shift Tuning
  • C++ 完美转发
  • k8s部署OpenELB
  • vue3父组件调用子组件方法
  • AI大模型分类以及Prompt优化技巧
  • Microsoft Azure 在印度尼西亚区域正式上线
  • MDP相关内容
  • JVM中对象的存储
  • AI能否取代软件架构师?我将4个大语言模型进行了测试
  • win11下pip安装matplotlib超时的问题解决
  • PAT(最近)
  • spring cloud gateway 断言(Predicates)与过滤器(filters)
  • 基于vue框架的电子竞技赛事管理系统12t47(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • JVM中类加载过程是什么?
  • FPGA 不兼容故障及处理
  • SRS流媒体服务器(3)视频通话环境搭建和源码分析
  • 使用 Vue CLI 和 vuedraggable 实现拖拽排序功能
  • 深度学习赋能:正面吊车载箱号识别系统的核心技术
  • 电子电器架构 --- 48V架构的一丢丢事情
  • 排序算法——计数排序