MVCC 原理与并发控制实现

news2025/5/31 21:35:41

MVCC 原理与并发控制实现

1. MVCC 基本概念

MVCC(Multi-Version Concurrency Control,多版本并发控制)是现代数据库系统中实现并发控制的核心技术之一。与传统的锁机制不同,MVCC通过维护数据的多个版本来实现非阻塞读取。

关键结论:MVCC的核心思想是通过数据多版本来实现读不阻塞写、写不阻塞读的并发控制
golang专栏:https://duoke360.com/tutorial/path/golang

2. MVCC 核心原理

2.1 版本链机制

每个数据行会维护一个版本链,包含:

  • 事务ID(Transaction ID):标识创建该版本的事务
  • 回滚指针(Roll Pointer):指向旧版本数据的指针
  • 删除标记(Delete Flag):标记该版本是否已被删除
+---------+---------+---------+
| 版本3   | 版本2   | 版本1   |
| TxID=103| TxID=102| TxID=101|
+---------+---------+---------+

2.2 快照读(Snapshot Read)

MVCC通过快照隔离(Snapshot Isolation)实现一致性读:

  1. 每个事务开始时获取当前活跃事务列表
  2. 读取时只能看到:
    • 已提交的事务修改
    • 本事务自身的修改
  3. 忽略未提交事务和本事务开始后提交的事务修改

2.3 可见性判断规则

数据库通过以下规则判断数据版本对当前事务是否可见:

  1. 版本创建事务ID < 当前事务ID
  2. 版本创建事务已提交
  3. 版本创建事务不在当前事务的快照活跃事务列表中

3. MVCC 实现细节

3.1 InnoDB 的 MVCC 实现

MySQL InnoDB引擎中MVCC的具体实现:

  • 隐藏字段

    • DB_TRX_ID:6字节,最后修改该行的事务ID
    • DB_ROLL_PTR:7字节,回滚指针
    • DB_ROW_ID:6字节,隐藏的行ID
  • Undo Log

    • 存储数据修改前的旧版本
    • 构成版本链的基础
  • ReadView

    • m_ids:生成ReadView时活跃的事务ID列表
    • min_trx_id:m_ids中的最小值
    • max_trx_id:下一个将分配的事务ID
    • creator_trx_id:创建该ReadView的事务ID

3.2 PostgreSQL 的 MVCC 实现

PostgreSQL采用略有不同的实现方式:

  • Tuple Visibility

    • xmin:插入该元组的事务ID
    • xmax:删除/锁定该元组的事务ID
    • ctid:元组物理位置
  • Vacuum机制

    • 定期清理不再需要的旧版本
    • 防止事务ID回卷问题

4. MVCC 的并发控制优势

关键优势:MVCC相比锁机制显著提高了系统的并发性能

  1. 读不阻塞写:读取操作不需要获取锁
  2. 写不阻塞读:写入操作不会阻塞读取旧版本
  3. 避免死锁:减少了锁竞争场景
  4. 一致性读:事务看到的是一致的快照

5. MVCC 的局限性

5.1 写冲突问题

MVCC无法完全避免写-写冲突

  • 多个事务同时修改同一数据时仍需锁机制
  • 常见解决方案:乐观锁或悲观锁

5.2 存储开销

  • 需要维护多个数据版本
  • Undo log增长可能导致存储压力

5.3 长事务问题

  • 长时间运行的事务会阻止旧版本数据清理
  • 可能导致版本链过长影响性能

6. MVCC 与隔离级别

不同隔离级别下MVCC的行为差异:

隔离级别MVCC行为特点
读未提交不使用MVCC,直接读取最新数据
读已提交每次读取都生成新的ReadView
可重复读事务开始时生成ReadView并保持
串行化通常退化为锁机制

注意:不同数据库实现可能有差异,如Oracle的读已提交也支持一致性读

7. 面试常见问题

7.1 MVCC如何解决幻读问题?

可重复读隔离级别下:

  • 通过快照读避免看到其他事务新插入的数据
  • 但当前事务自身的修改仍可能导致幻读
  • InnoDB通过间隙锁补充解决

7.2 MVCC中的版本何时被清理?

当满足以下条件时版本可以被清理:

  1. 没有活跃事务需要访问该版本
  2. 版本对应的事务已提交
  3. 该版本不是当前最新版本

7.3 为什么需要Undo Log?

Undo Log在MVCC中扮演关键角色:

  1. 存储数据旧版本实现版本链
  2. 支持事务回滚
  3. 实现一致性读

8. 实际应用建议

  1. 合理设置事务隔离级别:根据业务需求选择
  2. 控制事务长度:避免长事务导致版本堆积
  3. 监控Undo Log:防止空间耗尽
  4. 定期维护:执行VACUUM(PostgreSQL)或purge(InnoDB)

最佳实践:理解MVCC原理有助于设计高性能数据库应用,但也要注意其局限性

通过深入理解MVCC机制,开发者可以更好地优化数据库访问模式,构建高并发的数据密集型应用。在面试中,结合具体数据库实现和实际案例讲解MVCC,会展现更深入的技术理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2391908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS 7.0重置root密码

文章目录 版本&#xff1a;CentOS 7.0内核版本&#xff1a;CentOS Linux, with Linux 3.10.0-123.el7.x86_64 服务器重启后&#xff0c;等待进入上述页面&#xff0c;按⬆⬇键&#xff0c;中断正常启动。在此页面按E&#xff0c;进入编辑模式 继续按⬇&#xff0c;找到linux16…

YOLOV11改进策略【最新注意力机制】CVPR2025局部区域注意力机制LRSA-增强局部区域特征之间的交互

1.1网络结构 1.2 添加过程 1.2.1 核心代码 import torch import torch.nn as nn import torch.nn.functional as F from einops import rearrangedef patch_divide(x, step, ps):"""Crop image into patches.Args:x (Tensor): Input feature map of shape(b, …

DAY33 简单神经网络

你需要自行了解下MLP的概念。 你需要知道 梯度下降的思想激活函数的作用损失函数的作用优化器神经网络的概念 神经网络由于内部比较灵活&#xff0c;所以封装的比较浅&#xff0c;可以对模型做非常多的改进&#xff0c;而不像机器学习三行代码固定。 1. 神经网络的概念 (Th…

OBOO鸥柏丨2025年鸿蒙生态+国产操作系统触摸屏查询一体机核心股

在信创产业蓬勃发展的当下&#xff0c;OBOO鸥柏积极响应纯国产化号召&#xff0c;推出基于华为鸿蒙HarmonyOS操作系统的触摸屏查询一体机及室内外场景广告液晶显示屏一体机上市&#xff0c;OBOO鸥柏品牌旗下显示产品均采用国产芯片&#xff0c;接入终端控制端需支持安卓Windows…

【观成科技】Ymir勒索软件组织窃密木马RustyStealer加密通信分析

1.概述 Ymir勒索软件首次发现于2024年7月&#xff0c;采用ChaCha20加密算法对受害者文件进行加密&#xff0c;加密文件后缀为.6C5oy2dVr6。在攻击过程中&#xff0c;Ymir勒索组织利用名为RustyStealer的窃密木马获取受害企业的账号凭证&#xff0c;为后续横向移动和权限提升奠…

Vuer开源程序 是一个轻量级的可视化工具包,用于与动态 3D 和机器人数据进行交互。它支持 VR 和 AR,可以在移动设备上运行。

​一、软件介绍 文末提供程序和源码下载 Vuer开源程序 是一个轻量级的可视化工具包&#xff0c;用于与动态 3D 和机器人数据进行交互。它支持 VR 和 AR&#xff0c;可以在移动设备上运行。 二、Our features include: 我们的功能包括&#xff1a; light-weight and performa…

短视频一键搬运 v1.7.1|短视频无水印下载 一键去重

短视频一键搬运是一款全自动智能处理软件&#xff0c;专为短视频创作者设计。它自带去水印、改MD5码、视频去重、视频编辑等功能&#xff0c;能够高效处理大量视频&#xff0c;解放双手并降低成本。该软件支持从多个短视频平台无缝提取视频并去除水印&#xff0c;同时检测敏感词…

海上石油钻井平台人员安全管控解决方案

一、行业挑战与需求分析 海上钻井平台面临复杂环境风险&#xff08;如易燃易爆、金属干扰、极端气象&#xff09;和人员管理难题&#xff08;如定位模糊、应急响应延迟&#xff09;。传统RFID或蓝牙定位技术存在精度不足&#xff08;1-5米&#xff09;、抗干扰能力差等问题&am…

TEASER-plusplu Windows Mingw编译

编译记录&#xff1a; 1.下载该库 v2.0 链接1&#xff1a;https://github.com/MIT-SPARK/TEASER-plusplus 连接2&#xff1a;https://github.com/MIT-SPARK/TEASER-plusplus/releases 2.下载 googletest 链接&#xff1a;https://github.com/google/googletest/releases?page2…

tryhackme——Data Exfiltration

文章目录 一、网络拓扑二、数据泄露分类2.1 传统数据泄露2.2 C2通信2.3 隧道 三、隧道3.1 Exfiltration using TCP socket3.2 Exfiltration using SSH3.3 Exfiltrate using HTTP(S)HTTP隧道 3.4 Exfiltration using ICMP3.4.1 ICMP数据包结构3.4.2 MSF实现ICMP数据泄露3.4.3 IC…

阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF

阿里云服务器安装Linux宝塔面板用于部署网站&#xff0c;又安装了雷池WAF用于防护网站&#xff0c;网站访问正常。可以参考文章&#xff1a;Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF 本文介绍使用 acme.sh 通过 DNS API 全自动申请和续签免费Let’s Encry…

【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动

文章目录 前言一、HUAWEI MateBook Fold 非凡大师&#xff08;一&#xff09;非凡设计&#xff08;二&#xff09;非凡显示&#xff08;三&#xff09;非凡科技&#xff08;四&#xff09;非凡系统&#xff08;五&#xff09;非凡体验 二、HUAWEI MateBook Pro三、预热&#xf…

SpringBoot Controller接收参数方式, @RequestMapping

一. 通过原始的HttpServletRequest对象获取请求参数 二. 通过Spring提供的RequestParam注解&#xff0c;将请求参数绑定给方法参数 三. 如果请求参数名与形参变量名相同&#xff0c;直接定义方法形参即可接收。(省略RequestParam) 四. JSON格式的请求参数(POST、PUT) 主要在PO…

端午节互动网站

端午节互动网站 项目介绍 这是一个基于 Vue 3 Vite 开发的端午节主题互动网站&#xff0c;旨在通过有趣的交互方式展示中国传统端午节文化。网站包含三个主要功能模块&#xff1a;端午节介绍、互动包粽子游戏和龙舟竞赛游戏。 预览网站&#xff1a;https://duanwujiekuaile…

react-color-palette源码解析

项目中用到了react-color-palette组件&#xff0c;以前对第三方组件都是不求甚解&#xff0c;这次想了解一下其实现细节。 简介 react-color-palette 是一个用于创建颜色调色板的 React 组件。它提供了一个简单易用的接口&#xff0c;让开发者可以轻松地创建和管理颜色调色板。…

在 Ubuntu 上安装 NVM (Node Version Manager) 的步骤

NVM (Node Version Manager) 是一个用于管理多个 Node.js 版本的工具&#xff0c;它允许您在同一台设备上安装、切换和管理不同版本的 Node.js。以下是在 Ubuntu 上安装 NVM 的详细步骤&#xff1a; 安装前准备 可先在windows上安装ubuntu 参考链接&#xff1a;https://blog.…

重温经典算法——插入排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 插入排序是一种基于元素逐步插入的简单排序算法&#xff0c;其核心思想是将待排序序列分为已排序和未排序两部分&#xff0c;每次从未排序部分取出第一个元素&…

塔能科技:为多行业工厂量身定制精准节能方案

在当今追求可持续发展的时代&#xff0c;工厂能耗精准节能成为众多企业关注的焦点。塔能科技凭借先进的技术和丰富的经验&#xff0c;服务于广泛的行业客户&#xff0c;其中55.5%来自世界500强和上市公司。针对不同行业工厂的特点和需求&#xff0c;塔能提供了一系列行之有效的…

【实证分析】上市公司全要素生产率+5种测算方式(1999-2024年)

上市公司的全要素生产率&#xff08;TFP&#xff09;衡量企业在资本、劳动及中间投入之外&#xff0c;通过技术进步、管理效率和规模效应等因素提升产出的能力。与单纯的劳动生产率或资本生产率不同&#xff0c;TFP综合反映了企业创新能力、资源配置效率和组织优化水平&#xf…

弥散制氧机工作机制:高原低氧环境的氧浓度重构技术

弥散制氧机通过空气分离与智能扩散技术&#xff0c;将氧气均匀分布于封闭或半封闭空间&#xff0c;实现环境氧浓度的主动调控。其核心在于 “分子筛吸附动态均布智能反馈” 的协同作用机制&#xff0c;为高原、矿井、医疗等场景提供系统性氧环境解决方案。 一、空气分离&#x…