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

MySQL-MVCC(Multi-Version Concurrency Control)

MySQL-MVCC(Multi-Version Concurrency Control)

MVCC(多版本并发控制):为了解决数据库并发读写和数据一致性的问题,是一种思想,可以有多种实现方式。

核心思想:写入时创建行的新版本,读取时查看当前行版本。

InnoDB解决方法思路:undo log+read view

1.undo log

在这里插入图片描述

trx_id:表示最近修改该行的事务id。

roll_pointer:指向的是上一个版本数据地址。

trx_id:每次开启一个事务时,事务都有一个id,如果事务对行进行了修改,同时修改行的trx_id为当前事务的id。

roll_pointer:事务对行进行了修改,同时将历史版本数据写入undo log,并修改roll_pointer指针指向修改前的版本。

举例:使用更新语句更新表中内容。

update users set age = 30 where id = 1;
update users set age = 40 where id = 1;

在这里插入图片描述

undo是一种逻辑日志,主要在事务的执行过程中,记录数据修改的历史版本,在必要的时候恢复到历史的状态。这些连接的版本数据称为版本链。

undo的回滚方式:如果要将数据回归为历史的版本,InnoDB做的是与之前相反的工作,对于insert,InnoDB会执行一个delete。对于delete,InnoDB会执行一个insert。对于update,会执行一个相反的update。

2.Read View

随着版本链的增长,事务读取的时候可以读取哪一个版本呢?这将是我们接下来要解决的问题。

什么时候生成Read View:在READ COMMITTED隔离级别下,每次读取数据时都会生成一个新的Read View。而在REPEATABLE READ隔离级别下,只有在事务中的第一个SELECT操作(快照读)时才会创建Read View,之后的SELECT操作不会再创建新的Read View。

Read View的几个属性:

  1. trx_ids:表示的是在Read View生成时刻系统里活跃的事务ID列表。
  2. up_limit_id:记录trx_list列表中事务ID最小的ID。
  3. low_limit_id:Read View生成时刻系统尚未分配的下一个事务ID,也就是目前已出现过的事务ID的最大值+1。

读取数据过程:

  1. 如果读取的行的事务id是创建Read View事务id,说明该事务修改了,返回的是当前事务修改后的数据。
  2. 如果读取行的事务id是trx_ids列表中的,说明是对自己不可见的数据,需要从版本链中查找。
  3. 如果读取的行的事务id不是trx_ids列表中的且行事务id小于当前事务id,说明是已经提交了的事务,对自己可见。

快照读和当前读

快照读:实现是基于Read View。
当前读:始终读取的是最新的数据。

MVCC是否有解决幻读问题

对于部分场景解决了幻读问题,部分场景没有解决。如果仅仅是查询操作的话可以解决幻读(快照读),如果是对新插入的数据进行更新(当前读),就会发生幻读。

3.总结

MVCC只在RC(READ COMMITED)和RR(READ REPEATABLE )中生效,因为READ UNCOMMITED读取的永远都是最新数据,SERIALIZABLE会对读取的行加锁,不需要解决并发和数据一致性问题。

参考书籍:

[1]High Performance MySQL[M].,:792.

[2]MySQL技术内幕[M].,:391.

相关文章:

MySQL-MVCC(Multi-Version Concurrency Control)

MySQL-MVCC(Multi-Version Concurrency Control) MVCC(多版本并发控制):为了解决数据库并发读写和数据一致性的问题,是一种思想,可以有多种实现方式。 核心思想:写入时创建行的新版…...

ArcGIS中的镶嵌数据集与接缝线

此处介绍一种简单方法,根据生成的轮廓线来做镶嵌数据集的拼接。 一、注意修改相邻影像的上下重叠。注意修改ZOrder和每幅影像的范围。 二、修改新的镶嵌线并且导出影像文件。 三、还有其他方法和注意事项。...

网络安全工程师自主学习计划表(具体到阶段目标,保姆级安排,就怕你学不会!)

前言 接下来我将给大家分享一份网络安全工程师自学计划指南,全文将从学习路线、学习规划、学习方法三个方向来讲述零基础小白如何通过自学进阶网络安全工程师,全文篇幅有点长,同学们可以先点个收藏,以免日后错过了。 目录 前言…...

Linux 根据 PID 查看进程名称

ps aux | grep PID...

Python二级 每周练习题21

练习一: 提示用户输入两个正整数,编程求出介于这两个数之间的所有质数并打印输出。 显示格式为“*数是质数。” 答案: x(int(input(请输入第一个正整数:)),int(input(请输入第二个正整数:))) #变量x存放input输入的两个整数的元组 Num1min(x) #判断输入数字…...

【算法训练-数组 三】【数组矩阵】螺旋矩阵、旋转图像、搜索二维矩阵

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是螺旋矩阵,使用【二维数组】这个基本的数据结构来实现 螺旋矩阵【EASY】 二维数组的结构特性入手 题干 解题思路 根据题目示例 mat…...

LED灯实验--汇编

asm-led.S .text .global _start _start: /* 1. led灯的初始化 *//* 1.1 使能GPIOE、DPIOF外设控制器的时钟 */ldr r0, 0x50000A28ldr r1, [r0]orr r1, r1, #(0x3 << 4)str r1, [r0]/* 1.2 设置PE10、PE8、PF10引脚为输出模式 */ldr r0, 0x50006000ldr r1, [r0]bic r1,…...

Android多线程学习:线程池(一)

一、概念 线程池&#xff1a;创建并维护一定数量的空闲线程&#xff0c;当有需要执行的任务&#xff0c;就交付给线程池中的一个线程&#xff0c;任务执行结束后&#xff0c;该线程也不会死亡&#xff0c;而是回到线程池中重新变为空闲状态。 线程池优点&#xff1a; 1、重用…...

网络安全(黑客技术)—小白自学笔记

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟入…...

掌握核心技巧就能创建完美的目录!如何在Word中自动创建目录

目录是Word布局的一个重要因素&#xff0c;尤其是在编写较长的文档时。那么&#xff0c;你如何在你的作品中添加目录呢&#xff1f;在这篇文章中&#xff0c;我将分享一些基于Word2016自动创建目录的经验。希望它能或多或少地帮到你。 自动创建目录 1、输入目录文本的名称&am…...

正则表达式中re.match、re.search、re.findall的用法和区别

这位作者的例子写的非常好&#xff0c;记录一下&#xff0c;目前用到的比较多的是findall 正则表达式中re.match、re.search、re.findall的用法和区别_<re.match object; span(0, 270), match<a href"/-CSDN博客...

算法题:买卖股票的最佳时机含手续费(动态规划解法贪心解法-详解)

这道题有两种解法&#xff1a;动态规划 or 贪心算法。 贪心算法的提交结果要比动态规划好一些&#xff0c;总体上动态规划的解法更容易想到。&#xff08;完整题目附在了最后&#xff09; 1、动态规划解法 设置两个数&#xff0c;dp[0]表示遍历到股票prices[i]时手里没有股…...

【gcc】RtpTransportControllerSend学习笔记 4:码率分配

本文是woder大神 的文章的学习笔记。 大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。 gcc保障带宽公平性,预估码率后要分配码率,实现qos效果: webrtc源码分析(9)-拥塞控制(下)-码率分配 是 woder 大神进一步给出的另一篇神作。 本文是对(https://w…...

「专题速递」AR协作、智能NPC、数字人的应用与未来

元宇宙是一个融合了虚拟现实、增强现实、人工智能和云计算等技术的综合概念。它旨在创造一个高度沉浸式的虚拟环境&#xff0c;允许用户在其中交互、创造和共享内容。在元宇宙中&#xff0c;人们可以建立虚拟身份、参与虚拟社交&#xff0c;并享受无限的虚拟体验。 作为互联网大…...

什么是基于意图的网络(IBN)

基于意图的网络是一种网络技术&#xff0c;它根据业务意图&#xff08;来自网络管理员的服务请求&#xff09;配置 IT 基础架构&#xff0c;无需任何人工干预&#xff0c;它不断提供关键的网络见解&#xff0c;并不断调整硬件配置以确保满足意图&#xff0c;它将网络从以设备为…...

知识增强语言模型提示 零样本知识图谱问答10.8

知识增强语言模型提示 零样本知识图谱问答 摘要介绍相关工作方法零样本QA的LM提示知识增强的LM提示与知识问题相关的知识检索 摘要 大型语言模型&#xff08;LLM&#xff09;能够执行 零样本closed-book问答任务 &#xff0c;依靠其在预训练期间存储在参数中的内部知识。然而&…...

虚拟现实项目笔记:SDK、Assimp、DirectX Sample Browser、X86和X64

文章目录 SDK是什么Assimp是什么DirectX Sample Browser是什么X86和X64生成解决方案和重新生成解决方案 SDK是什么 SDK是Software Development Kit的英文缩写&#xff0c;意思是软件开发包。 软件开发包中往往包含有多种辅助进行软件开发的内容&#xff0c;包括一些软件开发工…...

openwrt rm500u ncm方式拨号步骤记录

1.进入设备页面 用户名&#xff1a;root 2.创建接口 3.配置接口 国内APN 信息 中国移动APN&#xff1a;CMNET 中国联通APN&#xff1a;3GNET 中国电信APN&#xff1a;CTNET 4.防火墙配置 5.点击Save&Apply 6.配置完成后重启设备。重新进入设备页面&#xff0c;可以看…...

使用js代码将一个值为“1=增量,2=全量“的字符串转化为一个数组,数据格式为[{value:““,label:“‘‘}]

const str "1增量&#xff0c;2全量"; const arr str.split(",").map(item > {const [value, label] item.split("");return { value, label}; });...

图片调色盘

图片预览 配置安装 Color-Thief 安装包使用文档 yarn add colorthief -S // npm install colorthief --save代码 <template><div class"img-thief"><div class"container"><div class"thief-item" v-for"(item, in…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...