mysql事务以及MVCC相关原理 📅 发布时间:2026/7/11 17:35:21 👁️ 浏览次数: 一.事务提及事务就绕不开事务的四大特性原子性一致性隔离性持久性。事务是一组操作的集合它是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。特性原子性Atomicity事务是不可分割的最小操作单元要么全部成功要么全部失败。一致性Consistency事务完成时必须使所有的数据都保持一致状态。隔离性Isolation数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。持久性Durability事务一旦提交或回滚它对数据库中的数据的改变就是永久的。在事务的四大特性中原子性一致性持久性通过mysql中的redo log 和undo log实现而隔离性则通过锁和MVCC(多版本并发控制)实现下面是具体的原理。二. redo log解释重做日志记录的是事务提交时数据页的物理修改是用来实现事务的持久性。该日志文件由两部分组成重做日志缓冲redo log buffer以及重做日志文件redo log file前者是在内存中后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中用于在刷新脏页到磁盘发生错误时进行数据恢复使用。Redo log是InnoDB用来保证事务持久性的机制他的核心作用是记录数据页修改前的操作数据库崩溃后可以通过redo log恢复数据并实现WALWrite-Ahead Logging)机制- 日志先落盘数据页后落盘。Redo log通常是通常是物理日志记录的是数据页的物理修改而不是某一行或某几行修改成怎样怎样它用来恢复提交后的物理数据页(恢复数据页且只能恢复到最后一次提交的位置)。SQL执行后修改Buffer Pool中的数据页生成redo log再写入到redo log buffer中数据在redo log buffer时位于内存中此时事务并未提交但可以落盘Redo log的刷盘时机不仅仅时事务commit,常见的刷盘时机有commitredo log buffer 空间不足导致部分日志刷盘后台线程周期性刷盘例如InnoDB每秒会触发一次刷盘当有checkpoint时checkpoint在一定程度上代表了刷到磁盘时日志所处的LSN位置。在这里为什么不直接把Buffer Pool的数据页写入磁盘呢这就涉及到数据库设计的核心没有redo log时写入磁盘为随机IO写入性能非常差且当事务涉及到多个数据页时如果直接刷盘IO巨大。redo log的核心思想是用顺序写日志代替随机写数据页这是顺序IO速度极快。三.Undo Log基本概念undo log有两个作用提供回滚和MVCC且undo log是采用段(segment)的方式来记录的每个undo操作在记录的时候占用一个undo log segment。以上只是个人的浅显理解可以参考https://www.cnblogs.com/f-ck-need-u/p/9010872.html个人认为大佬讲的非常详细四. MVCC以及实现原理在介绍MVCC及其实现原理前我们先了解几个概念。4.1 MVCC概念全称 Multi-Version Concurrency Control多版本并发控制。指维护一个数据的多个版本使得读写操作没有冲突快照读为 MySQL 实现 MVCC 提供了一个非阻塞读功能。MVCC 的具体实现还需要依赖于数据库记录中的三个隐式字段、undo log 日志、readView。4.2 快照读简单的select不加锁就是快照读快照读读取的是记录数据的可见版本有可能是历史数据不加锁是非阻塞读。Read Committed每次select都生成一个快照读。Repeatable Read开启事务后第一个select语句才是快照读的地方。Serializable快照读会退化为当前读。4.3 当前读读取的是记录的最新版本读取时还要保证其他并发事务不能修改当前记录会对读取的记录进行加锁。对于我们日常的操作如select … lock in share mode(共享锁)select … for update、update、insert、delete(排他锁) 都是一种当前读。4.4 三个隐式字段MVCC的实现需要依赖三个隐式字段查看表结构的隐式字段可以通过 idb2sdi 表空间名 查看4.5 undo log 日志和undo log 日志链上面已经介绍过undo log日志这里就不再过多赘述基础概念。undo log在MVCC中主要体现在下面几点不同事务或相同事务对同一条记录进行修改会导致记录中的undo log生成一条记录版本链条链表的头部是最新的旧记录链表尾部是最早的旧纪录。4.6 ReadView读视图ReadView读视图是快照读sql执行MVCC提取数据的依据记录并维护系统当前活跃的事务未提交的id。包括四个核心字段附ReadView中的活跃事务id集合(m_ids)的范围是生成ReadView时刻所有已开始但未提交的读写事务id版本链数据访问规则对于不同的数据库隔离级别生成的ReadView的时机也不同READ COMMITTED在事务中每一次执行快照读时生成 ReadView。REPEATABLE READ仅在事务中第一次执行快照读时生成 ReadView后续复用该 ReadView。4.6.1 RC隔离级别的快照读实现原理4.6.2 RR隔离级别的快照读实现原理无非就是看当前事务的id和版本链数据访问规则对比不成立就继续往undo log日志链由早到晚对比直到找到符合可读性的事务版本读取对应版本的数据。在RC隔离级别中每次事务执行生成的读视图不同RR级别相同。
VMware安装教程带资料完整版 文章目录工具下载(稀缺资源,尽快转存到自己网盘,防止失效)一.安装VMware二.安装虚拟机工具下载(稀缺资源,尽快转存到自己网盘,防止失效) 夸克网盘:https://pan.quark.cn… 2026/3/18 16:37:41
灵芝孢子粉哪个牌子好?从破壁率、成分、口碑分析. 灵芝孢子粉哪个牌子好?从破壁率、成分、口碑三大维度科学解析随着健康养生意识持续提升,灵芝孢子粉因其富含多糖、三萜等活性成分,成为越来越多消费者日常营养补充的选择。然而,面对市场上众多品牌,“灵芝孢子粉哪个牌… 2026/3/18 16:37:41
Pycharm安装教程简单易懂带资料(全家桶通用) 今天给大家免费分享一个 Pycharm 2024.1版的安装教程,全文通过文字图片的方式讲解,手把手教你如何安装Pycharm , 只需要几分钟即可搞定! 工具下载(稀缺资源,尽快转存到自己网盘,防止失效) 夸克网… 2026/3/18 16:37:41
Zulu AI开发搭子调教指南:上下文感知+规则驯化+IDE原生流 1. 这不是“AI写代码”,而是你亲手调教出的后端开发搭子我用文心快码整整两年半,从Zulu公测第一天起就在IntelliJ IDEA里把它当主力搭档——不是把它当搜索引擎,也不是当自动补全升级版,而是当成一个能听懂项目语言、记得住团队规… 2026/7/11 17:34:41
CANN/cannbot-skills特殊操作 特殊操作 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 1. 概述 HFusion 方言的特殊操作包括调试操作、排序、直方图… 2026/7/11 17:34:41
ascii-art网页集成教程:在浏览器中实现动态ASCII艺术效果 ascii-art网页集成教程:在浏览器中实现动态ASCII艺术效果 【免费下载链接】ascii-art A Node.js library for ansi codes, figlet fonts, ascii art and other ASCII graphics 项目地址: https://gitcode.com/gh_mirrors/as/ascii-art 想要在网页中创建炫酷的… 2026/7/11 17:34:41
PIC18F8520与PAM8904构建工业级音频警报系统 1. 项目概述与核心组件选型在工业控制和智能家居领域,警报通知系统是保障设备安全运行的重要环节。这次我们要搭建的是一套基于PIC18F8520微控制器和PAM8904音频驱动器的硬件警报平台,它能根据不同类型的事件触发定制化的声音提示。PIC18F8520这款8位微控… 2026/7/11 17:32:41
TypeScriptCompiler编译器测试框架:自动化测试套件与错误检测机制终极指南 TypeScriptCompiler编译器测试框架:自动化测试套件与错误检测机制终极指南 【免费下载链接】TypeScriptCompiler TypeScript Compiler (by LLVM) 项目地址: https://gitcode.com/gh_mirrors/ty/TypeScriptCompiler TypeScriptCompiler是一个基于LLVM/MLIR构建… 2026/7/11 17:28:38
编程器固件 MAC 地址修复:3 种方法解决刷机后地址冲突与丢失 编程器固件 MAC 地址修复:3 种方法解决刷机后地址冲突与丢失当技术人员进行路由器硬改、救砖或批量刷机时,经常会遇到一个棘手的问题:刷写编程器固件后,设备的 MAC 地址出现重复或丢失。这不仅会导致网络冲突,还可能影… 2026/7/11 17:22:36
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/11 14:53:30
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/11 12:30:52
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/11 15:29:59