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

MySQL-MVCC核心原理-版本链ReadView与可见性判断

MVCC 全称是 Multi-Version Concurrency Control也就是多版本并发控制。它的核心思想是为同一行数据维护多个版本让读写在很多情况下不用互相阻塞。没有 MVCC 时读写冲突通常要大量依赖锁。MVCC 让普通select可以读一个可见的数据版本而不是必须等待正在修改这行数据的事务结束。MVCC 依赖哪三样东西InnoDB 的 MVCC 主要依赖记录中的隐藏字段。undo log 版本链。ReadView 读视图。这三者配合解决一个问题当前事务应该看到这行数据的哪个版本记录中的隐藏字段InnoDB 每行记录除了业务字段还会维护一些隐藏字段。隐藏字段含义DB_TRX_ID最近一次修改这行记录的事务 IDDB_ROLL_PTR回滚指针指向 undo log 中的上一个版本DB_ROW_ID隐藏行 ID没有主键时可能使用其中DB_TRX_ID和DB_ROLL_PTR是理解 MVCC 的关键。undo log 版本链当一行数据被多个事务修改时undo log 会形成一条版本链。链表头部通常靠近较新的旧版本沿着roll_pointer可以找到更早的版本。例如一条记录从A1被改成A2又被改成A3。当前数据页里是最新值而 undo log 中保存旧值。不同事务根据可见性规则可能读到A3、A2或A1。当前读和快照读不是所有读都走 MVCC 快照。类型SQL 示例特点当前读select ... for update、update、delete、insert读取最新版本并加锁快照读普通select读取可见版本不加锁非阻塞MVCC 主要服务于快照读。普通select不加锁也能在并发写入时稳定读取就是因为它读的是某个可见版本。ReadView 是什么ReadView 是快照读执行时生成的读视图用来判断版本链上的某个版本是否对当前事务可见。ReadView 中有四个核心字段字段含义creator_trx_id创建这个 ReadView 的事务 IDm_ids创建 ReadView 时活跃且未提交的事务 ID 集合min_trx_id活跃事务中的最小 IDmax_trx_id下一个将要分配的事务 ID版本可见性规则当沿着版本链找到某个版本时会拿这个版本的trx_id和 ReadView 比较。这块最适合按流程走。每遇到一个版本就问几个问题是否是否是否是否快照读开始生成或复用 ReadView读取当前记录版本trx_id 是否等于 creator_trx_id版本可见trx_id 是否小于 min_trx_idtrx_id 是否大于等于 max_trx_id版本不可见trx_id 是否在 m_ids 中沿 undo log 版本链找上一个版本规则可以简化为trx_id creator_trx_id自己改的能看见。trx_id min_trx_id这个版本在 ReadView 生成前已经提交能看见。trx_id max_trx_id这个版本在 ReadView 生成后才出现不能看见。min_trx_id trx_id max_trx_id如果trx_id不在m_ids中说明已提交能看见如果在m_ids中说明当时还活跃不能看见。这些规则的目的很朴素只让当前事务看到它应该看到的已提交版本。RC 和 RR 的区别READ COMMITTED和REPEATABLE READ的核心差异之一是生成 ReadView 的时机不同。隔离级别ReadView 生成时机结果READ COMMITTED每次执行快照读都生成新的 ReadView同一事务内多次查询可能看到新提交数据REPEATABLE READ第一次快照读生成 ReadView后续复用同一事务内多次查询结果更稳定两种隔离级别的差别可以这样看RCRR同一个事务内多次普通 select隔离级别每次 select 生成新的 ReadView可能看到其他事务新提交的数据第一次 select 生成 ReadView后续 select 复用同一个 ReadView同一事务内读取结果更稳定这也解释了为什么 RC 下可能出现不可重复读而 RR 能让普通快照读保持可重复。一个简单例子假设事务 5 创建了 ReadViewm_ids {3, 4, 5} min_trx_id 3 max_trx_id 6 creator_trx_id 5现在沿着版本链看到几个版本版本 trx_id是否可见原因5可见当前事务自己修改2可见小于min_trx_id早已提交6不可见不小于max_trx_id属于更晚事务4不可见在m_ids中当时未提交如果某个版本不可见就继续沿着 undo log 版本链向前找直到找到可见版本或没有更旧版本。面试回答模板可以这样回答MVCC 是多版本并发控制用来降低读写冲突。InnoDB 每行记录有隐藏字段比如事务 ID 和回滚指针更新数据时会生成 undo log多个旧版本通过回滚指针形成版本链。普通 select 是快照读会基于 ReadView 判断版本是否可见。ReadView 中包含当前活跃事务集合、最小活跃事务 ID、下一个事务 ID 和创建者事务 ID。RC 隔离级别下每次快照读都会生成新的 ReadViewRR 隔离级别下第一次快照读生成后会复用所以 RR 下多次读取更稳定。小结MVCC 的难点不是名词多而是要把它们串成一条线隐藏字段记录版本信息undo log 串起旧版本ReadView 决定哪个版本可见。理解这条线MVCC 就从“背概念”变成了“顺着链表找可见数据”。

相关文章:

MySQL-MVCC核心原理-版本链ReadView与可见性判断

MVCC 全称是 Multi-Version Concurrency Control,也就是多版本并发控制。它的核心思想是:为同一行数据维护多个版本,让读写在很多情况下不用互相阻塞。 没有 MVCC 时,读写冲突通常要大量依赖锁。MVCC 让普通 select 可以读一个可见…...

如何永久保存微信聊天记录?三步实现完整备份与智能分析

如何永久保存微信聊天记录?三步实现完整备份与智能分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...

DOM 浏览器

DOM 浏览器 引言 DOM(文档对象模型)是浏览器中处理HTML和XML文档的标准方式。它允许开发人员通过编程方式访问和操作网页内容。本文将详细介绍DOM的概念、其在浏览器中的运用以及相关的编程技巧。 DOM简介 什么是DOM? DOM(Document Object Model)是一种跨平台和语言独…...

OneQuery:统一异构数据源查询的抽象层设计与实战

1. 项目概述:一个查询,无限可能最近在折腾一个数据聚合项目,需要从多个异构数据源里捞数据,然后统一处理。这活儿听起来简单,但真干起来,每个数据源都有自己的查询语法、连接方式和返回格式,光是…...

【ElevenLabs匈牙利语音实战指南】:2024最新API调用、音色微调与本地化合规避坑全解析

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs匈牙利语音支持概览与本地化价值定位 ElevenLabs 自 2024 年 3 月起正式引入匈牙利语(hu-HU)语音合成支持,成为其首批覆盖的中东欧语言之一。该能力依托于…...

韩国市场合规语音交付迫在眉睫!ElevenLabs韩文生成必须配置的4项GDPR+KCC隐私开关

更多请点击: https://intelliparadigm.com 第一章:韩国市场语音AI合规落地的紧迫性与战略意义 韩国《个人信息保护法》(PIPA)于2023年修订后,明确将语音生物特征数据列为“敏感信息”,要求语音AI系统在采集…...

桌面CNC木质游戏手柄外壳制作:从Fusion 360设计到实战加工全流程

1. 项目概述:从数字模型到木质手柄的旅程如果你和我一样,既痴迷于复古游戏的怀旧情怀,又享受亲手将数字设计变为实体物件的成就感,那么这个项目绝对能点燃你的热情。我们这次要做的,不是一个简单的3D打印外壳&#xff…...

MCP服务器部署模板:容器化与CI/CD自动化实践指南

1. 项目概述:一个为MCP服务器量身定制的部署蓝图如果你正在开发或维护一个基于模型上下文协议(Model Context Protocol, MCP)的服务器,并且对如何将其优雅、可靠地部署到生产环境感到头疼,那么你很可能已经…...

中鼎智能冲刺港股:年营收18.8亿 诺力股份是实控股东

雷递网 雷建平 5月16日中鼎智能(无锡)科技股份有限公司(简称:“中鼎智能”)日前更新招股书,准备在港交所上市。截至2026年3月31日止三个月,与上年同期相比,中鼎智能录得相对稳定的收…...

OpenClaw-Subcortex:轻量级自动化任务编排与执行框架详解

1. 项目概述与核心价值最近在折腾一些自动化工具,发现一个挺有意思的项目叫openclaw-subcortex。乍一看这个名字,可能有点摸不着头脑,又是“爪子”又是“皮层下”的,感觉像是什么生物或者神经科学的东西。但实际上,这是…...

本地可控 AI 助手搭建|Windows 一键安装 OpenClaw 操作指南

OpenClaw(小龙虾)Windows 一键部署保姆级教程|10 分钟搭建专属数字员工 前言 2026 年备受关注的开源 AI 智能体 OpenClaw(昵称小龙虾),在 GitHub 收获大量关注,凭借本地运行、零代码操作、自动…...

安得医疗冲刺港股:年营收9亿,利润1.5亿 上海亿瑞控制41%股权

雷递网 雷建平 5月16日山东安得医疗用品股份有限公司(简称:“安得医疗”)日前递交招股书,准备在港交所上市。截至2023年、2024年及2025年12月31日止年度,安得医疗分别宣派及派付股息6670万元、4670万元及4000万元。年营…...

MCP服务器生产级部署:从Docker到Kubernetes的完整工程化实践

1. 项目概述:一个为MCP服务器量身定制的部署蓝图如果你正在开发或使用一个基于模型上下文协议(Model Context Protocol, MCP)的服务器,并且为如何将其优雅、可靠地部署到生产环境而头疼,那么你很可能需要的…...

量子退火与经典优化结合的金融投资组合优化实践

1. 量子退火与经典优化结合的金融投资组合优化实践在金融投资领域,如何构建最优投资组合一直是核心挑战。传统方法如现代投资组合理论(MPT)和均值-方差优化(MVO)虽然奠定了理论基础,但在处理大规模资产配置时往往面临计算效率瓶颈。近年来,量…...

从肌电信号到Arduino控制:MyoWare传感器实战指南

1. 项目概述:当肌肉“说话”,我们如何“倾听”?如果你玩过一些体感游戏,或者看过科幻电影里用意念控制机械臂的场景,心里大概会闪过一个念头:这玩意儿到底是怎么做到的?其实,很多酷炫…...

DIY智能电机推子:从闭环控制到MIDI交互的硬件实战

1. 项目概述与核心价值如果你玩过专业的音频混音台,或者在一些高端的灯光控制台上见过那种会自己“嗖”一下滑到指定位置的推子,那你一定对电机推子(Motorized Fader)不陌生。这东西的魅力在于,它既是精准的模拟输入设…...

【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit

目录 一、一个自然的想法 二、类型转换运算符的基本语法 写法 使用 三、隐式转换的风险 问题1:意外的不希望发生的转换 问题2:多个转换路径的歧义 问题3:与构造函数隐式转换叠加导致混乱 四、explicit:禁止隐式转换 语法…...

TPU材料3D打印iPad Pro保护框:从设计到成品的完整实践指南

1. 项目概述:为什么选择TPU为iPad Pro打造专属保护框?作为一名折腾过几十公斤耗材的3D打印老玩家,我始终认为,这项技术最迷人的地方不在于复刻网上的模型,而在于为手头的心爱之物量身定制解决方案。就拿我手边的这台iP…...

Arm Neoverse-V2/V3缓存与内存参数优化指南

1. Arm Neoverse-V2/V3集群架构概述Arm Neoverse系列处理器作为数据中心和基础设施领域的重要计算引擎,其V2/V3代架构在缓存子系统和内存管理方面进行了显著优化。作为从业多年的系统架构师,我认为理解这些处理器的参数配置对性能调优至关重要。Neoverse…...

WELearn网课助手完整指南:5大核心功能彻底解放你的英语学习时间

WELearn网课助手完整指南:5大核心功能彻底解放你的英语学习时间 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;基于生成式AI(ChatGPT)的答案生成 项目地址: https://g…...

系统管理员AI编程实战:基于Claude的运维自动化脚本开发指南

1. 项目概述:一个面向系统管理员的Claude-Code学习与实践仓库最近在整理自己的技术栈时,发现很多系统管理员同行对如何将大型语言模型(LLM)高效地融入日常运维工作流感到困惑。大家普遍觉得这些AI工具很强大,但具体到写…...

Adafruit Feather RP2040 SCORPIO:专为大规模NeoPixel灯光控制而生的开发板

1. 项目概述:为什么你需要一块专为大规模灯光控制而生的开发板?如果你曾经尝试过用一块普通的微控制器驱动超过几百个NeoPixel(或WS2812)LED,你很可能已经撞上了性能的天花板。CPU被时序生成任务完全占用,动…...

GitHub自动化运维:构建模块化Operator集提升开发效率

1. 项目概述:一个为GitHub开发者量身定制的“操作集”如果你是一个重度GitHub用户,无论是维护个人项目、参与开源贡献,还是管理团队仓库,大概率都经历过这样的场景:每天要重复执行一堆琐碎但必要的操作。比如&#xff…...

5分钟学会创建专业交通网络可视化地图

5分钟学会创建专业交通网络可视化地图 【免费下载链接】transit-map The server and client used in transit map simulations like swisstrains.ch 项目地址: https://gitcode.com/gh_mirrors/tr/transit-map 你想在网页上展示动态的公共交通网络吗?Transit…...

RTX 5090功耗600W:高功耗显卡的系统级挑战与实战装机指南

1. 项目概述:从一则功耗新闻到显卡生态的深度解构最近,一则关于英伟达下一代旗舰显卡RTX 5090功耗可能高达600W的消息,在硬件圈和AI计算领域激起了不小的波澜。对于普通玩家而言,这或许只是一个“电老虎”又升级了的谈资&#xff…...

多数人支持!微软或把 Xbox 重新品牌化为 XBOX,回归最初形式

Xbox 品牌重塑:从民意调查到账号更名微软 Xbox 首席执行官阿莎夏尔马在 X(原推特)上发起民意调查,询问粉丝微软应使用 Xbox 还是 XBOX,结果多数人支持 XBOX,随后公司将其 X 账号更名。不过,Xbox…...

Chrome 扩展 uMatrix 被弃用,MV3 环境下 matrix³ 原型尝试实现其功能

Chrome 扩展 uMatrix 被弃用,MV3 环境下如何实现其功能?matrix 原型来尝试 曾经有一款很棒的 Chrome 扩展程序叫 uMatrix,它由 uBlock Origin 的开发者 Raymond Hill 编写,是一种直观控制网站权限和子资源请求的工具。 它看上去是…...

【仿真学习框架】MultiModalWBC 完全指南:从入门到精通的多模态全身控制框架

版本: v1.0 | 日期: 2026-05-15 目标读者: 具身智能研究者、机器人学习工程师、人形机器人开发者 前置知识: 基础强化学习(PPO)、PyTorch、刚体动力学概念 📑 目录 1. 初见 MultiModalWBC:我们到底在解决什么问题? 1.1 人形机器人控制的"碎片化"困境 1.2 多模态…...

安卓客户端架构解析:从MVVM到网络通信的完整实践

1. 项目概述:一个面向安卓设备的智能客户端最近在整理手头的开源项目时,发现了一个挺有意思的仓库,名字叫TOM88812/xiaozhi-android-client。光看这个标题,你可能会有点摸不着头脑,这“小智”到底是个啥?是…...

会话管理封装实践:构建安全可扩展的分布式会话系统

1. 项目概述:一个被低估的会话管理利器如果你是一名开发者,尤其是经常需要处理用户登录、权限校验、状态保持这类“脏活累活”的后端或全栈开发者,那么你一定对“会话管理”这四个字又爱又恨。爱的是,它是构建安全、有状态应用的基…...