MySQL的MVCC

目录

1.MVCC基本概念

1.当前读:

2.快照读:

 3.MVCC:Multi-Version Concurrency Control,多版本并发控制:

2.MVCC实现原理-三个隐藏字段

3.MVCC实现原理-undo log日志

1.undo log:回滚日志

2.undo log版本链

4.MVCC实现原理:readView

1.ReadView,读视图:

2.版本链数据访问规则

5.不同隔离级别下的readView

1.在RC,Read Committed下:

2.在RR,Repeatable Read下:

6.MVCC+锁:


1.MVCC基本概念


1.当前读:

        读取的是记录的最新版本,读取时保证其他并发事务无法修改当前记录,会对读取的记录加锁


2.快照读:

        读取的是记录的可见版本,可能是历史数据,不加锁,比如简单的select就是快照读
    * 默认的隔离级别下:开启事务后第一个select语句就是快照读的地方,后续select时查询的就是快照数据
    * 是非阻塞读的,因为都可以读到快照数据

  
3.MVCC:Multi-Version Concurrency Control,多版本并发控制:

        指维护一个数据的多个版本,使得读写操作没有冲突
    * 快照读就为MVCC提供了一个非阻塞读功能
    * MVCC的实现原理:数据库中的三个隐式字段、undo log日志、readView

2.MVCC实现原理-三个隐藏字段


* 记录中的隐藏字段

* 两个或者三个(DB_ROW_ID是没有主键才会自动生成的)

3.MVCC实现原理-undo log日志


1.undo log:回滚日志


    * 在insert、update、delete时产生的便于数据回滚的日志
    * insert时,产生的undo log只在回滚时需要,事务提交后,可以立即删除
    * update、delete时,产生的undo log日志不仅在回滚时需要,快照读时也需要,不会立即删除


2.undo log版本链


    * 不同事务对同一条记录进行修改,会导致该记录的undo log生成一条记录版本链条,链条的头部是最新的旧记录,链条的尾部是最早的旧记录

4.MVCC实现原理:readView


1.ReadView,读视图:

是快照读SQL执行时MVCC提取数据的依据,记录并维护当前活跃(未提交)的事务ID
  简单来说:快照读在读取时可以读取历史版本,而undo log日志形成的版本链产生了很多历史记录,readView是用来判断读取哪一个历史记录的
* readView包含四个核心字段:

2.版本链数据访问规则


    * trx_id:当前事务id

5.不同隔离级别下的readView

1.在RC,Read Committed下:

        事务中每一次执行快照读生成ReadView

2.在RR,Repeatable Read下:

        仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView(同一个事务中读取两条相同数据是一样的,从而保证可重复读)

6.MVCC+锁:

        保证了事务的隔离性和一致性

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

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

相关文章

samba服务

samba服务 1. samba诞生背景2. samba简介3. samba配置文件详解3.1 配置文件中参数的作用3.1.1 security参数的四种验证方式3.1.2 passdb backend定义用户后台的类型 4. samba服务部署与配置windos共享linux挂载共享 1. samba诞生背景 1987 年,微软公司和英特尔公司…

vue中elementUI表单循环验证

进行验证的步骤 1、表单el-form 添加 :model"form" ref"form" :rules"rules",注意是 :model"form"不是v-model,而后每个el-form-item绑定prop 2、不循环的示例在官网可看 3、循环表单的验证:3-1、e…

顺序表 --- C语言实现

目录 1.线性表 2.顺序表 2.1 概念和结构 2.2 接口实现 2.3 数组相关面试题 2.4 顺序表的问题及思考 1.线性表 什么是线性表 : 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常…

阿里云服务器架构X86_GPU_裸金属_超级计算集群详解

阿里云服务器架构有什么区别?X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别?阿里云服务器网分享云服务器ECS架构详细说明: 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…

A_003.adb常用命令使用介绍

1.adb工作原理说明 adb命令是调试控制手机过程中用的比较多工具。adb是一个C/S架构的应用程序,主要由三部分组成: (1)、运行在电脑端的adb client程序 在电脑终端中执行adb --help可以查看当前支持的adb命令。当在命令行执行程序adb相关命令的时候,adb程序尝试连接到主机上…

layui选项卡演示

layui选项卡演示 .1 引入layui2. 选项卡演示实列3.js分离的代码4运行结果 在前端开发中,选项卡常用于展示多个内容模块,提供用户友好的界面交互方式。layui作为一款简洁易用的前端框架,提供了丰富的组件库,其中包括了强大且易用的…

Drag Your GAN论文解读,基于点的交互式操作拖动到生成图像[DragGAN]

只需要鼠标的点击就可以自动修图的产品,火爆问世,可以说是超越PS,神一般的存在了,而且没有门槛,对于普通大众来说直接可以上手使用,这个是PS完全不具备的。更关键的是,这款产品跟PS明显区别在于…

【yarn】 ‘husky install‘ fails if ‘.git‘ directory does not exists解决方法

问题描述 环境:win10 yarn 1.22.19 问题:在使用yarn安装前端依赖时,yarn install 出现错误: .git can’t be found (see https://git.io/Jc3F9) error Command failed with exit code 1. 截图 原因分析 根据设计,husky安装必…

开启visual studio,git for windows 疯狂占用内存的解决

1、开启visual studio,git for windows 疯狂占用内存的解决 最近开启visual studio写代码的时候,IDE总是会莫名奇妙的卡住然后闪退,今天打开任务管理器看了下原因,发现是visual studio所占磁盘内存不断疯涨,每秒几十M…

【软件设计原则】系统设计面试基础:CAP 与 PACELC

什么是 CAP 定理以及 PACELC 如何扩展它? 在分布式系统中,可能会发生不同类型的故障,例如,服务器可能会崩溃或永久故障,磁盘可能会损坏导致数据丢失,或者网络连接可能会丢失,导致系统的一部分无…

Java字符串比较的方法(3种)

1.equals()方法 equals()方法将两个字符串每个字符是否相同进行逐一比较,若相同返回true反之返回false,对于字符的大小写也在检查范围内,equals()方法格式如下:str1.equals(str2); 程序实例 public class Demo {public static voi…

【C语言督学营 第十八天】考研408排序大题初探(将排序思想融入题目)

文章目录 题目一分析代码实战 题目二分析代码实战 补充(快排与归并)数据结构大题注意点!!!(评分标准) 题目一 分析 (1)算法的基本设计思想 由题意知,将最小的nl2个元素放在Ai中,其余的元素放在A2中&#x…

JavaScript--改变 HTML 的值

要改变 HTML 元素的值,可以使用以下方法: 1.使用元素节点的 innerText 属性来改变元素的文本内容。 例如:element.innerText 新的文本内容; 2.使用元素节点的 innerHTML 属性来改变元素的 HTML 内容。 例如:element.innerHTML …

《分布式中间件技术实战:Java版》学习笔记(三):Redis实现点赞、取消赞功能

用户在发布内容(包括博客、想法、日记等等)时,后台数据入库后,要往Redis的有序集合添加一条分数为0的记录。这个有序集合是用来对内容点赞量做排序的。同时,可以记录用户操作日志。 Override public String insertArt…

react使用SVGA特效 常用api

下载插件 npm install svgaplayerweb --save react中代码 import React, { useEffect } from react; import SVGA from svgaplayerweb const Svga () > {const bofang () > {var player new SVGA.Player(#demoCanvas);//创建实例var parser new SVGA.Parser(#demo…

AR增强现实技术解决企业远程协作需求

随着科技的不断发展,AR(增强现实)远程协同系统已经成为了一种新型的工作方式。这种系统利用AR技术将虚拟信息叠加到现实世界中,从而实现异地高效协作。 由广州华锐互动开发的AR远程协同系统,广泛应用于各个行业的远程协作场景中,…

Pycharm专业版连接远程GPU服务器+xshell7和xrtp7下载

这篇博客就带大家手把手用pycharm连接远端服务器,用服务器上的GPU跑代码。其中有很多雷点,都一一帮大家踩了,所以这也是一篇避雷篇。文章附pycharm专业版下载链接,xshell7和xrtp7的下载和使用说明,希望可以给大家带来帮…

js手动画平滑曲线,贝塞尔曲线拟合

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"…

postgresql 数据库 重建索引 所需时间测试

postgresql 数据库 重建索引 所需时间测试 文章目录 postgresql 数据库 重建索引 所需时间测试前言测试前准备重建索引前数据库状态测试计划重建索引命令测试开始1.先对表2进行测试2. 表3测试3. 表1测试 &#x1f308;后记 前言 众所周知&#xff0c;postgresql数据库使用久了…

layui入门

layui入门 一.ayui简介1.简单易用2.组件丰富3.高度定制化4.响应式布局5.轻量灵活 2.layui的入门基础操作3.登录实例4.注册实例 一.ayui简介 Layui&#xff08;流行音 “layui”&#xff0c;来自“领域的模块化”&#xff09;是一款前端UI框架&#xff0c;专注于提升 Web 开发效…