MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)

news2025/3/12 5:54:42

1.事务特性(ACID)

原子性:事务要么全部成功,否则全部回滚

一致性:保证逻辑完整性(关联表删除)

隔离性:事务并发隔离(行锁,间隙锁)

持久性:已提交的事务永久保存(Buffer,分两次写入)

2.事务隔离级别(解决事务并发时产生的一系列线程不安全问题)

读未提交:事务可以读取其他事务未提交的数据,可能导致脏读(脏读)

读已提交:事务只能读取已提交事务,可能导致数据不一致(不可重复读)

可重复读:保证数据相同,不能保证结果集一致(幻读)

串行化:保证事务串行执行,降低效率 

3.通过MVCC解决不可重复读

①版本链(UndoLog 以及数据中trx_id(事务ID)和DB_ROLL_PTR(上个版本链指针))
②read view
  • m_ids:当前活跃(未提交)的事务ID集合
  • min_trx_id:最小的活跃事务ID
  • max_trx_id:下一个待分配的事务ID
  • currert_trx_id:当前的事务ID

 小于最小事务ID的版本均可读到,大于最大事务ID读不到,中间看活跃事务ID集合 

此处引出一个问题,既然已经有了事务ID集合,为什么还要使用最小ID?

提高了查询效率,事务ID集合在仅有两个数据时时间复杂度为O(1),其他情况下均为O(n),鉴于数据库事务并发问题,大部分时间都是在两个数据以上的,因此可借助最小ID,快速查询是否可读

4.MySql解决幻读(事务进行时禁止插入删除)

① 使用隔离级别
  • 默认推荐:可重复读,一致性和性能
  • 极端场景:串行化,严格禁止并发(性能低)
② 使用 SELECT XXX FOR UPDATE 提前锁定范围

5.快照读和当前读

快照读:读取数据的历史版本 

        通过readview和Undolog构建历史版本

        使用场景:​普通SELECT语句

当前读:读取数据的最新提交版本

        通过行锁,间隙锁,Next-Key Locks(行锁+间隙锁)

        使用场景:SELECT XXX FOR UPDATE(独占锁) 

 

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

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

相关文章

每日一题----------集合

数组: (1)长度开始必须指定,而且一但指定,不能修改。 (2)保存的必须为同一类型的元素。 (3)使用数组进行增加元素的代码--比较麻烦。 如果要添加数据则需要&#xff…

滑动窗⼝(同向双指针)---最⼤连续1的个数III

题目链接 给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。 示例 1: 输入:nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释:[1,1,1,0,0,…

《几何原本》命题I.30

《几何原本》命题I.30 平行于同一直线的两条直线互相平行。 设 l 1 ∥ l 2 , l 1 ∥ l 3 l_1\parallel l_2,l_1\parallel l_3 l1​∥l2​,l1​∥l3​ 则 ∠ 1 ∠ 2 , ∠ 1 ∠ 3 \angle 1\angle 2,\angle 1\angle 3 ∠1∠2,∠1∠3 则 ∠ 2 ∠ 3 \angle 2\angle 3 ∠2∠3…

dify-SQL查询

第1节 DIFY 编排流程 1.1 步骤 1.开始:用户输入分析需求 2.LLM-SQL 专家:大模型根据用户输入需求生成 SQL 查询 3.SQL查询:执行查询并获取数据 4.结束:输出查询结果集 1.2 工作流 第2节 组件配置 2.1 开始 新建一个开始组件&am…

贪心算法精解:用C++征服最优解问题

贪心算法精解:用C征服最优解问题 一、贪心算法的本质:当下最优即全局最优 贪心算法如同下棋高手,每一步都选择当前最优的走法。它的核心思想是:通过局部最优选择的叠加,最终得到全局最优解。这种算法在时间复杂度上往…

一文了解汽车图像传感器

2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…

2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距

一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…

ubuntu软件

视频软件,大部分的编码都能适应 sudo apt install vlc图片软件 sudo apt install gwenview截图软件 sudo apt install flameshot设置快捷键 flameshot flameshot gui -p /home/cyun/Pictures/flameshot也就是把它保存到一个自定义的路径 菜单更换 sudo apt r…

《面向对象程序设计-C++》实验一 熟悉Visual C++开发环境及上机过程

一、实验目的 了解和使用VC集成开发环境;熟悉VC环境的基本命令和功能键;熟悉常用的功能菜单命令;学习使用VC环境的帮助;学习完整的C程序开发过程;理解简单的C程序结构。 二、实验内容 使用Visual C 6.0集成环境来编…

Java的 JDBC 编程

1. Java的数据库编程:JDBC JDBC:Java 通过JDBC这样的技术来操作 MySQL MySQL 是一个基于 C/C 实现的数据库。 本身也提供了一系列的 API (Application Progromming Interface),让程序员调用,从而通过代码来…

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权,禁止商用!本项目未经授权,禁止商用!本项目未经授权&…

如何将ipynb文件转换为pdf文件

事情起因: 基本我所有的code以及代码注释,以及出图说明都统一放在jupyter notebook中, 代码注释,或者文档说明,实际上就是markdown所做的那一切,都是在markdown中写的; 代码的话,…

具备多种功能的PDF文件处理工具

软件介绍 在日常办公和学习场景中,PDF文件使用极为频繁,而一款功能强大的PDF编辑软件能大幅提升处理效率。 今天要介绍的Adobe Acrobat Pro DC 2024.005.20414,就具备像编辑Word文档一样便捷编辑PDF的能力。 PDF文档在学习和工作中广泛应用…

如何做好滚珠导轨的防尘工作?

滚珠导轨滑块在使用过程中,会吸附大量的灰尘和污垢,导致摩擦力增大,使用寿命缩短。那么,我们应该如何做好滚珠导轨的防尘工作呢? 1、使用防护罩:对于外露的滚珠导轨,可安装如螺旋弹簧钢带套管、…

nettrace rtt分析器

开源工具学习记录之流程梳理 近期对腾讯的的开源项目: nettrace(网络故障分析工具) ,进行源码学习。 开源仓库:Nettrace开源仓库 开源工具实现注释:nettrace学习记录 Nettrace学习记录之流程梳理Nettrace eBPF程序自动挂载方式探究 nettrace rtt分析器…

裂变营销策略在“开源链动2+1模式AI智能名片S2B2C商城小程序”中的应用探索

摘要:在当今数字化时代,企业营销手段日新月异,裂变营销作为一种高效的用户增长策略,正逐渐成为众多企业竞相探索的焦点。本文旨在探讨“开源链动21模式AI智能名片S2B2C商城小程序”中裂变营销的应用,通过“分名、分利、…

WangEditor快速实现版

WangEditor快速实现版 效果 案例代码 后端 package com.diy.springboot.controller;import cn.hutool.core.util.IdUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiImplicitParam; import org.sp…

Java常见面试技术点整理讲解——后端框架(整理中,未完成)

前言: 对于后端常用框架的技术整理,其实框架在平时就是会用就行,但面试时多半需要描述实现原理,这个要靠自己理解,不推荐死记硬背。 这篇和另外几篇文章区分开,主要用于规整Java后端各种框架,…

Dify 本地部署教程

目录 一、下载安装包 二、修改配置 三、启动容器 四、访问 Dify 五、总结 本篇文章主要记录 Dify 本地部署过程,有问题欢迎交流~ 一、下载安装包 从 Github 仓库下载最新稳定版软件包,点击下载~,当然也可以克隆仓库或者从仓库里直接下载zip源码包。 目前最新版本是V…

Python----数据可视化(Seaborn二:绘图一)

常见方法 barplot方法 单独绘制条形图 catplot方法 可以条形图、散点图、盒图、小提亲图、等 countplot方法 统计数量 一、柱状图 seaborn.barplot(dataNone, xNone, yNone, hueNone, colorNone, paletteNone) 函数描述data用于绘图的数据集。x用于绘制长格式数据的输入。…