mysql中mvcc如何处理纯读事务的?

在 MySQL 的 InnoDB 中,即使事务尚未分配事务 ID,读视图(Read View) 的生成仍然依赖于系统中的活跃事务列表。这是通过 MVCC 的机制来实现的,以下是具体的原理和可见性判断方法。


MVCC 的核心概念

在 MVCC 中,每一行记录都有两个隐藏的版本控制字段:

  1. trx_id(事务 ID):记录最后修改该行的事务 ID。
  2. roll_pointer:指向 Undo Log 的指针,用于回溯到上一版本数据。
活跃事务列表

当一个事务开始并生成 Read View 时,InnoDB 会获取当前系统中活跃事务的快照,包括:

  1. min_trx_id:系统中仍未提交的最小事务 ID。
  2. max_trx_id:系统中尚未分配的下一个事务 ID(逻辑上的“最大事务 ID”)。
  3. 活跃事务集合 (active_trx_ids):当前系统中所有未提交的事务 ID 列表。

这些信息被保存为 Read View,决定了当前事务能够看到的数据版本。


没有事务 ID 的事务如何判断可见性

即使事务没有分配事务 ID(例如纯读事务),Read View 的生成机制依然可以运作,具体如下:

可见性规则

对于每一行记录的 trx_id(记录最后修改该行的事务 ID),Read View 会通过以下规则判断该行是否可见:

  1. 当前事务的写入是否可见:

    • 如果 trx_id 小于 min_trx_id:表示该事务在当前事务启动之前已经提交,因此该版本是可见的。
    • 如果 trx_id 大于或等于 max_trx_id:表示该版本是未来的修改版本,对当前事务不可见。
  2. 当前事务的并发写入是否可见:

    • 如果 trx_id[min_trx_id, max_trx_id) 区间内:
      • 检查 active_trx_ids 中是否包含该 trx_id
      • 如果包含,表示该事务仍未提交,对当前事务不可见。
      • 如果不包含,表示该事务已经提交,该版本是可见的。

事务未分配事务 ID 的特殊处理

对于未分配事务 ID 的事务:

  • 它的 Read View 的创建仅依赖系统中的活跃事务列表 (active_trx_ids)。
  • 判断可见性时,当前事务没有事务 ID,因此不会参与 active_trx_ids 的比较,完全基于其他事务的状态来判断可见性。

这种设计确保了即使是纯读事务,也能通过 Read View 保证一致性。


总结

即使事务没有分配事务 ID,它的 Read View 是基于快照生成的,使用以下机制判断数据版本的可见性:

  1. 通过 trx_idmin_trx_idmax_trx_id 的比较。
  2. 通过 active_trx_ids 判断未提交的并发事务。 这套机制确保了任何事务都能正确判断数据的可见性,无论事务是否分配了事务 ID。

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

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

相关文章

魔改log4j2的JsonLayout,支持自定义json格式日志

小伙伴们,你们好,我是老寇,我又回来辣,1个多月不见甚是想念啊!!!跟我一起魔改源码吧 1.自定义json格式【PatternLayout】 大部分教程都是这个,因此,我就简单给个配置&a…

笔记分享: 西安交通大学COMP551705数据仓库与数据挖掘——02. 关联规则挖掘

文章目录 1. \textbf{1. } 1. 基本概念 2. \textbf{2. } 2. 布尔关联规则 2.1. \textbf{2.1. } 2.1. 一些基本概念 2.2. \textbf{2.2.} 2.2. Apriori \textbf{Apriori} Apriori算法 2.3. \textbf{2.3.} 2.3. Apriori \textbf{Apriori} Apriori算法示例 3. \textbf{3. } 3. 多…

基于标签相关性的多标签学习

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

网站小程序app怎么查有没有备案?

网站小程序app怎么查有没有备案?只需要官方一个网址就可以,工信部备案查询官网地址有且只有一个,百度搜索 "ICP备案查询" 找到官方gov.cn网站即可查询! 注:网站小程序app备案查询,可通过输入单位…

手撸 chatgpt 大模型:简述 LLM 的架构,算法和训练流程

本节我们自顶向下看看大模型的相关概念,了解其基本架构以及从零手撸大模型的基本流程。自从 openai 释放了 chatgpt 后,人工智能就立马进入了大模型时代,我还记得在此之前 NLP 的处理主要依赖于深度学习的 LSTM,GRU 等模型架构。这…

爬虫——JSON数据处理

第三节:JSON数据处理 在爬虫开发中,JSON(JavaScript Object Notation)是最常见的数据格式之一,特别是在从API或动态网页中抓取数据时。JSON格式因其结构简单、可读性强、易于与其他系统交互而广泛应用于前端与后端的数…

AutoUpdater.NET 实现 dotNET应用自动更新

AutoUpdater.NET 是一款用于WPF、Winform软件版本更新的框架,类似框架还有Squirrel、WinSparkle、NetSparkle、Google Omaha。 一、安装AutoUpdater.NET 首先,您需要在项目中安装AutoUpdater.NET库。您可以通过NuGet包管理器来安装它。在Visual Studio中…

鸿蒙实现 web 传值

前言:安卓和 IOS 加载 H5 的时候,都有传值给到 H5 或者接收 H5 值,鸿蒙也可传值和接收 H5 的内容,以下是鸿蒙传值给 H5 端的具体操作 一: 定义好 H5 和鸿蒙传值的方法名,两端必须保持方法名一致 // xxx.ets import …

SpringBoot集成itext导出PDF

添加依赖 <!-- PDF导出 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency><groupId>com.itextpdf</groupId>&l…

【快速解决】kafka崩了,重启之后,想继续消费,怎么做?

目录 一、怎么寻找我们关心的主题在崩溃之前消费到了哪里&#xff1f; 1、一个问题&#xff1a; 2、查看消费者消费主题__consumer_offsets 3、一个重要前提&#xff1a;消费时要提交offset 二、指定 Offset 消费 假如遇到kafka崩了&#xff0c;你重启kafka之后&#xff0…

Kotlin深度面试题:协程、密封类和高阶函数

文章目录 知识回顾前言源码分析1.面试题目1&#xff1a;Kotlin中的协程与线程的区别是什么&#xff1f;如何在Android中使用协程进行异步编程&#xff1f;2.面试题目2&#xff1a;Kotlin中的扩展函数和扩展属性是什么&#xff1f;如何在Android开发中使用它们&#xff1f;3. 面…

查询DBA_FREE_SPACE缓慢问题

这个是一个常见的问题&#xff0c;理论上应该也算是一个bug&#xff0c;在oracle10g&#xff0c;到19c&#xff0c;我都曾经遇到过&#xff1b;今天在给两套新建的19C RAC添加监控脚本时&#xff0c;又发现了这个问题&#xff0c;在这里记录一下。 Symptoms 环境&#xff1a;…

【网络安全】网络安全防护体系

1.网络安全防护体系概述 1.1 网络安全的重要性 网络安全是保护网络空间不受恶意攻击、数据泄露和其他安全威胁的关键。随着数字化转型的加速&#xff0c;网络安全的重要性日益凸显&#xff0c;它不仅关系到个人隐私和企业机密的保护&#xff0c;还涉及到国家安全和社会稳定。…

从零开始学习 sg200x 多核开发之 TF 存储卡根文件系统扩容

入式 Linux 镜像制作时&#xff0c;考虑体积等因素&#xff0c;会把根文件系统做的比较小&#xff0c;镜像包较小&#xff0c;方便量产&#xff1b;有时&#xff0c;我们的 tf 或 emmc 的容量较大&#xff0c;烧写镜像后&#xff0c;有较大的空余空间未使用&#xff0c;现尝试把…

【Apache Paimon】-- 1 -- Apache Paimon 是什么?

目录 1、简介 2、概览 3、哪些场景可以使用 Paimon 4、周边生态 5、小结 6、参考 1、简介 我们听说过数据仓库、数据湖、数据湖仓,那你听说过流式数据仓库(Stream warehouse,简称:Streamhouse)吗?那我们今天就来解锁看看他们之中的新秀: Apache paimon 到底是什么…

[实战]SpringBoot使用MongoTemplate存储Float精度丢失问题

问题&#xff1a;使用SpringBoot2.x版本进行MongoDB的存储操作&#xff0c;Float类型数据出现精度丢失问题 解决方案如下&#xff1a; 情况一、字段类型为JSONObject进行存储时 设置值时采用Decimal128类型 Decimal128 value new Decimal128(new BigDecimal(declaredField.g…

Oracle 单机及 RAC 环境 归档模式及路径修改

Oracle 数据库的使用过程中经常会根据需求的不同而调整归档模式&#xff0c;也经常会修改归档文件存放路径。 下面分别演示单机及 RAC 环境下修改归档模式及路径的操作步骤。 一、单机环境 1.查询当前归档模式及路径 SQL> archive log list Database log mode …

用OMS进行 OceanBase 租户间数据迁移的测评

基本概念 OceanBase迁移服务&#xff08;&#xff0c;简称OMS&#xff09;&#xff0c;可以让用户在同构或异构 RDBMS 与OceanBase 数据库之间进行数据交互&#xff0c;支持数据的在线迁移&#xff0c;以及实时增量同步的复制功能。 OMS 提供了可视化的集中管控平台&#xff…

IDEA一键部署SpringBoot项目到服务器

安装Alibaba Cloud Toolkit插件 配置部署环境 1&#xff1a;设置服务名称 2&#xff1a;选择文件上传的类型 3:选择打包之后的jar文件 4: 添加需要上传的服务器信息 5:需要上传到服务器的地址 输入绝对路径 6: 选择上传文件后执行的脚本 可以参考另一篇文章 Linux启…

渗透测试之信息收集 DNS主机发现探测方式NetBIOS 协议发现主机 以及相关PorCheck scanline工具的使用哟

目录 主机发现 利用NetBIOS 协议发现主机 利用TCP/UDP发现主机 PorCheck scanline 利用DNS协议发现主机 主机发现 信息收集中的一项重要工作是发现内网中的主机、数据库、IP段网络设备、安全设备等资产&#xff0c;以便于更快地获取更多权限和密码&#xff0c;更加接近红…