Mysql高级——MVCC(多版本并发控制)

MySQL MVCC(多版本并发控制)详解

MVCC(Multi-Version Concurrency Control)是 MySQL InnoDB 存储引擎实现的一种并发控制机制,用于在保证事务隔离性的同时,提高数据库的并发性能。下面从原理、实现、事务隔离级别、优缺点和示例几个方面进行详细解析

MVCC 核心组件

1. 隐藏字段

每行记录包含三个隐藏字段:

列名大小描述
DB_TRX_ID6字节最近修改/插入该行的事务ID
DB_ROLL_PTR7字节回滚指针,指向Undo Log记录
DB_ROW_ID6字节隐藏自增ID(无主键时使用)

2. Undo Log(回滚日志)

3. Read View(读视图)

class ReadView {/* ... */
private:trx_id_t m_low_limit_id;      /* 大于等于这个 ID 的事务均不可见 */trx_id_t m_up_limit_id;       /* 小于这个 ID 的事务均可见 */trx_id_t m_creator_trx_id;    /* 创建该 Read View 的事务ID */trx_id_t m_low_limit_no;      /* 事务 Number, 小于该 Number 的 Undo Logs 均可以被 Purge */ids_t m_ids;                  /* 创建 Read View 时的活跃事务列表 */m_closed;                     /* 标记 Read View 是否 close */
}

在这里插入图片描述

MVCC工作流程

工作流程

在这里插入图片描述

数据修改流程

在这里插入图片描述

MVCC 与事务隔离级别的关系

1. READ COMMITTED(提交读)

特性实现方式
读视图创建时机每次SELECT语句执行时创建新ReadView
可见性能看到最新提交的数据

2. REPEATABLE READ(可重复读)

特性实现方式
读视图创建时机事务中第一次SELECT时创建ReadView
可见性整个事务看到相同的数据快照
幻读解决方案Next-Key Locking 机制

在这里插入图片描述

Read View 的可见性判断规则

当事务读取一行数据时,InnoDB 会根据以下规则判断该版本是否可见:

  • 如果数据版本的 DB_TRX_ID < 事务的低水位:该版本在事务启动前已提交,可见。
  • 如果数据版本的 DB_TRX_ID ≥ 事务的高水位:该版本在事务启动后才开始,不可见。
  • 如果数据版本的 DB_TRX_ID 在事务的活跃列表中:该版本由一个活跃事务创建,不可见。
  • 否则:该版本可见。

MVCC 的优缺点

1. 优点

高并发性能:读写不互斥,减少锁争用,提高吞吐量。
事务隔离:实现不同级别的事务隔离,保证数据一致性。
回滚高效:通过 undo 日志快速回滚。
快照读:支持一致性非锁定读,提高查询效率。

2. 缺点

存储空间开销:需要存储多个版本的数据和 undo 日志。
性能开销:维护 Read View 和版本链需要额外的 CPU 和内存资源。
长事务风险:长事务会保留大量 undo 日志,可能导致存储空间膨胀。

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

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

相关文章

Oracle union连接的怎么排序

在Oracle数据库中&#xff0c;使用UNION或UNION ALL操作符来合并两个或多个查询结果时&#xff0c;如果想对这些合并后的结果进行排序&#xff0c;通常有两种方法可以实现&#xff1a; 方法1&#xff1a;在最后的查询结果上使用ORDER BY 你可以在所有使用UNION或UNION ALL合并…

uni-app总结2-所需知识储备和学习途径

使用uni-app进行跨平台开发&#xff0c;开发者不用去掌握各个平台的开发语言&#xff0c;只需一套代码即可完成多端的产品输出。那么使用uni-app需要掌握什么呢&#xff0c;这里给大家分享一下。 Vue.js uni-app里是通过Vue来开发的&#xff0c;所以首先肯定是要掌握Vue语言。…

如何高效实现公司文件管理

要实现公司文件管理的高效&#xff0c;企业应聚焦统一文件规范、部署文档管理系统、强化权限控制、推动协同编辑、实施定期清理、推进文化建设、引入可视化分析。其中&#xff0c;统一文件规范是文件高效管理的基础。若缺乏清晰的命名规则与分类体系&#xff0c;即便配备了先进…

多模态大语言模型arxiv论文略读(124)

MediConfusion: Can you trust your AI radiologist? Probing the reliability of multimodal medical foundation models ➡️ 论文标题&#xff1a;MediConfusion: Can you trust your AI radiologist? Probing the reliability of multimodal medical foundation models …

nacos的总结

服务发现与健康监测&#xff1a;Nacos 支持多种服务注册方式&#xff0c;包括 API、SDK 和 Annotation 等&#xff0c;服务消费者可以通过 DNS 或 RPC 方式方便地发现服务。其健康检查机制通过主动和被动的方式实时监测服务实例的健康状态&#xff0c;确保流量不会被发送到不健…

低轨导航 | 低轨卫星导航PNT模型,原理,公式,matlab代码

一、PNT模型原理 低轨卫星PNT(定位、导航、授时)模型利用低轨星座的快速几何构型变化和强信号特性,通过三类核心观测值实现增强定位: 几何增强原理 低轨卫星速度7km/s(比GNSS快8-10倍)5分钟内观测几何变化相当于地面站24小时变化量加速模糊度收敛和误差分离信号增强原理…

基于python的查询工具,查询手机号的卡号归属地

本文介绍了一个利用Python进行电话号码归属地查询的代码示例。代码使用requests库发送HTTP请求&#xff0c;伪装浏览器UA头&#xff0c;通过lxml库解析网页数据&#xff0c;并运用XPath提取号码归属地信息。程序构建了查询URL&#xff0c;发送GET请求后解析返回的HTML内容&…

AI面试系统选型HR应考虑哪些问题?

北森人才管理研究院发布的《2025 企业校园招聘 AI 应用实用指南》数据显示&#xff1a;全球 44% 的企业已在招聘环节部署AI技术&#xff0c;72% 的 HR 每周至少使用一次 AI 工具&#xff0c;87% 的 HR 认为 AI 能显著提升招聘效率。 来源于《北森2025 企业校园招聘 AI 应用实用…

Redis02

redis的持久化机制 1.redis为什么需要持久化 redis本身运行时数据保存在内存中&#xff0c;那么在关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉。 redis持久化方式有两种: RDB AOF redis默认采用了一种持久化方式&#xff0c;即RDB &#xff08;Redi…

Gartner发布网络安全组织设计指南:设计网络安全组织的五项原则和六种主要安全组织类型

安全和风险管理领导者经常寻求一种通用的模型来组织其职能&#xff0c;这可能导致效率低下和需求得不到满足。然而&#xff0c;目前并没有一个标准的组织模型。这项研究可以帮助他们根据企业实际情况&#xff0c;设计出最合适的网络安全组织。 主要发现 许多安全和风险管理 (SR…

简述redis的单线程模式

在redis版本6之前&#xff0c;网络IO和键值对读写都是由一个线程来完成的。而redis的其他功能&#xff0c;比如持久化、异步删除、集群数据同步等&#xff0c;是由其他线程完成的。 为什么采用单线程 多线程有助于提升吞吐率&#xff08;系统同时处理的请求数&#xff09;&am…

WebSocket深度指南:从零基础到生产级应用

📚目录 1. WebSocket基础概念深度解析 2. WebSocket协议技术详解 3. WebSocket生命周期与状态管理 4. Spring Boot WebSocket完整实现 5. 完整聊天室项目实战 6. 高级功能与扩展应用 1. WebSocket基础概念深度解析 1.1 什么是WebSocket?深度理解 WebSocket是HTML5开…

复现 apache HTTPD 换行解析漏洞(CVE-2017-15715)

一、漏洞环境 docker环境 http://192.168.99.124:8082二、漏洞原理 Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致…

创始人 IP 起盘方法论:从 0 到 1 的系统化破局路径

在流量逻辑不断更新的当下&#xff0c;创始人 IP 如何构建可持续的商业闭环&#xff1f;结合行业头部案例的实战经验&#xff0c;可梳理出一套兼顾落地性与前瞻性的起盘策略&#xff0c;帮助 IP 在波动的市场中建立稳定的变现能力。 一、定位&#xff1a;在动态中验证方向 某…

数据结构 6(算法)

一、算法 1、概念 问题的求解方法 2、算法的特性和设计要求 算法的特性&#xff1a; 确定性 有穷性 输入输出 可行性 设计要求&#xff1a; 正确性 高效性 低存储 健壮性 可读性 3、时间复杂度O(n) 用于评估程序执行…

Android 开发问题:android.content.res.Resources$NotFoundException: Resource ID

android.content.res.Resources$NotFoundException: Resource ID #0xff412804问题原因 该异常表示 Android 系统尝试通过资源 ID 查找资源&#xff0c;例如&#xff0c;颜色、图片等&#xff0c;但未查找到对应资源 其中&#xff0c;0xff412804 是一个硬编码的整型颜色值&…

03.自动特征提取(深度学习)核心逻辑:通过多层非线性变换,让模型自动学习从原始数据到高层特征的映射。为什么多层非线性变换可以达到这样的效果?

在深度学习中,多层非线性变换能够实现自动特征提取的核心原因在于其对数据表征的分层学习能力和非线性映射的表达优势。以下从理论基础、数学机制、实际效果三个层面展开解析: 一、非线性变换的本质:突破线性模型的表达局限 线性模型的局限性 线性变换(如矩阵乘法)只能学…

42-Oracle 23 ai 安全新特性(Audit统一审计)

小伙伴们业务和安全运维中需要数据库审计都是由哪些模块来实现的&#xff0c;专门的第三方产品吗&#xff1f;在医疗领域防统方等业务场景和数据库的审计集合很是紧密。 在Oracle逐个版本的演进中&#xff0c;Oracle 23ai 的审计特性在安全领域的重大革新&#xff0c;延续传统…

Python 爬虫入门 Day 4 - 模拟登录爬虫与 Session 维持

Python 第二阶段 - 爬虫入门 &#x1f3af; 今日目标 学习什么是 Cookie / Session&#xff0c;为什么要维持登录状态掌握 requests.Session 用法模拟登录一个带登录表单的网站获取登录后的页面内容 &#x1f4d8; 学习内容详解 &#x1f510; 什么是 Session&#xff1f; …

新零售系统商城开发全解析

一、新零售系统商城概述​ (一)新零售的概念​ 新零售依托互联网与物联网技术,以数据驱动为核心,打破线上线下的界限,构建起一体化的全新零售模式。它不再局限于传统的销售渠道,而是通过整合线上电商平台、线下实体店铺以及现代物流配送等多方面资源,实现商品、服务、…