Mysql底层原理十一:Mvcc

news2024/11/29 12:43:37

为什么要mvcc?

  • 提高并发度,如果读和写都是通过加锁的方式,并发肯定上不来,通过mvcc来实现写通过加锁,读通过mvcc readView机制
3.9.1 Undo版本链

image.png
再重复一遍,页面中的记录存放在用户表空间的数据页中,undo log存在系统表空间的undo segment中

3.9.2 ReadView
  • 内容有哪些

    • m_ids :表示生成生成ReadView时活跃的事务id列表
    • min_trx_id: 表示生成ReadView时活跃读写事务最小的id,也就是m_ids中的最小值
    • max_trx_id: 表示生成ReadView时系统分配给下一个事务的id值,
    • creator_trx_id: 表示生成该ReadView时事务id
  • 可见规则:

    • 大于max_trx_id,肯定不可见,说明我创建事务的时候,另外事务还没有创建
    • 小于 min_trx_id,肯定是可见的,说明我创建事务的时候,事务已经提交了
    • 小于max_trx_id,但是不在活跃列表中,肯定是可见的,说明更新在前查询在后,但是更新没有提交事务,所以刚开始活跃列表里有它,但是提交事务之后活跃列表就没有它了,所以更新提交完,再查一遍就能查到了
  • RC隔离级别:RC的时候需要在select的时候查询到别人提交的数据,所以RC的时候,是利用每次Select就去创建一次ReadView,保证能看到别人提交的数据

  • RR的级别:RR的时候第一个select的时候,就创建好ReadView,后续都使用的是这个ReadView,RR级别如果使用ReadView的话,没办法完全解决幻读,因为存在锁定读(不从readview里面拿数据,从数据库拿最新数据),还是会导致幻读

幻读的2种情况:

  1. Session A select * from t for update,然后 Session B insert into t, 再然后 Session A select * from t for update,就把Session B插入的数据查出来了
  2. 另外一种情况:

FireShot Capture 001 - MySQL 如何解决幻读(MVCC 原理分析) - 掘金 - juejin.cn.png

总结:

  • RR隔离级别下间隙锁才有效,RC 隔离级别没有间隙锁
  • RR隔离级别是为了解决幻读,快照读依靠mvcc控制,当前读通过间隙锁解决
  • 间隙锁和行锁合称 Next-Key Locks,每个 Next-key Locks是 [)

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

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

相关文章

并发编程之Java中Selector

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Selector提供选择执…

【Web】CTFSHOW-2023CISCN国赛初赛刷题记录(全)

目录 Unzip BackendService go_session deserbug 主打一个精简 Unzip 进来先是一个文件上传界面 右键查看源码,actionupload.php 直接访问/upload.php,看到后端的源码 就是上传一个压缩包,对其进行解包处理 因为其是在/tmp下执行…

MySQL redo log和binlog的区别

redo log和binlog的区别 Redo Log(重做日志): 作用: Redo Log是InnoDB存储引擎特有的一种日志,用于确保数据库的事务持久性和恢复能力。 特点: 存储在InnoDB的数据文件中,而不是作为单独的日志…

CICD流水线 发布应用到docker镜像仓库

准备工作 1.先注册免费的镜像仓库 复制链接: https://cr.console.aliyun.com/cn-beijing/instances 实施 1. 新建流水线,选择模板 2.添加流水线源,及是你的代码仓库, 选择对应分支. 3.代码检查以及单元测试,这个步骤可以不用动它. 4. …

【C++】继承总结

一、前言 我们众所周知的C三大特性分别为:封装、继承、多态。 封装就是将接口实现统一化,隐藏那些不同的地方,在上层函数调用体现的方式一样,如各种容器的迭代器iterator,尽管底层实现的方式不同,但是在使用…

Java学习笔记23(面向对象三大特征)

1.5 多态 ​ *多态(polymorphic) ​ *方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承基础之上的 1.多态的具体体现 1.方法的多态 (重写和重载体现了多态) 2.对象的多态 ​ 1.一个对象的编译类型和…

亮数据----教你轻松获取数据

文章目录 1. 数据采集遇到的瓶颈1.1 不会造数据?1.2 不会写爬虫代码? 2.IP 代理基础知识2.1 基本概念2.2 作用和分类2.3 IP 代理的配置和使用2.4 安全和合规 3. 为何使用亮数据 IP 代理3.1 拥有丰富的代理网络服务3.2 简单易操作的采集工具3.3 拥有各平台…

爬虫入狱笔记——xx政府网站公开政策数据

最近在学习爬虫,做个笔记吧 今天爬xx政府网站-政策法规栏目的数据 咱们首先需要找到数据从哪里来,鼠标右键->检查(或者快捷键一般为F12)检查元素,搜索关键词 eg.【违法案例】 回车, 如果没有的话&am…

「媒体邀约」天津媒体邀约资源有哪些?媒体宣传现场报道

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 天津作为中国北方的重要城市,拥有丰富的媒体资源,可以为各类活动提供全面的媒体宣传和现场报道。以下是天津地区的媒体邀约资源: 1. 报纸媒体 - 《天…

「38」LUT在直播间调色的高级应用……

「38」LUT滤镜 对人或物进行精进调色 OBS软件中的LUT(Look Up Table)滤镜,可用于调整视频、图像的色彩和对比度等效果,以实现专业级的颜色调整需求。 左图为原图 右图为LUT 先对比上面的两张图,用了滤镜效果的变化…

【问题处理】银河麒麟操作系统实例分享,银河麒麟高级服务器操作系统mellanox 网卡驱动编译

1.Mellanox 网卡源码驱动下载链接: https://www.mellanox.com/downloads/ofed/MLNX_EN-5.7-1.0.2.0/MLNX_EN_SRC-5.7-1.0.2.0.tgz 2.系统及内核版本如下截图: 3.未升级前 mellanox 网卡驱动版本如下: 4.解压 “MLNX_EN_SRC-5.7-1.0.2.0.tg…

基于单片机电动自行车太阳能充电系统设计

**单片机设计介绍,基于单片机电动自行车太阳能充电系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的电动自行车太阳能充电系统设计,是一个将太阳能技术与电动自行车充电技术相结合的创…

【RealSense】Ubuntu20.04 安装 Intel RealSense ROS 并使用 D435i 测试

【RealSense】Ubuntu20.04 安装 Intel RealSense ROS 并使用 D435i 测试 1 本机环境2 安装流程3 存在的 bug3.1 Resource not found: rgbd_launch 1 本机环境 Ubuntu20.04ROS Noetic 2 安装流程 参考文档: Link 安装 Intel RealSense™ SDK 2.0,参考上一篇文章: L…

微信小程序实现滚动标签

使用scroll-view标签可实现组件滚动标签 1、list中 list.wxml代码如下: <!--pages/list/list.wxml--> <navigation-bartitle"小程序" back"{{false}}"color"black" background"#FFF"></navigation-bar><scroll-…

「媒体宣传」科技IT行业有哪些媒体邀约资源-51媒体网

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 科技IT行业的媒体邀约资源非常丰富&#xff0c;包括了各种类型的传统媒体和新兴的网络媒体平台。以下是一些主要的媒体邀约资源&#xff1a; 除此之外&#xff0c;还有一些其他科技类网络…

finebi6.0中我的分析中...中加自己的菜单

js的两个扩展点是&#xff1a; BI.config("bi.result_wrapper", function (e) {return e.showMerge !0, e}),BI.config("bi.analysis.admin_list", function (e) {return e.showMergeUser !0, e}) 对应的组件在conf.min.js中的 bi.search_sort 点击事件…

【多线程】Callable详解

Callable接口 先看看Callable接口的源码: Callable是一个函数式接口&#xff0c;此时就可以用lambda表达式更简洁地使用它。Callable是个泛型接口&#xff0c;只有一个方法call&#xff0c;该方法返回类型就是传递进来的V类型。call方法还支持抛出异常. 与Callable对应的是Ru…

「媒体宣传」产业金融财经媒体邀约资源有哪些-51媒体

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 产业金融财经领域的媒体邀约资源涵盖了多种平台和形式&#xff0c;主要包括以下几类&#xff1a; 杂志和报纸&#xff1a;如《中国经济周刊》和《中国证券报》&#xff0c;它们通常报道财…

从零开始:构建、打包并上传个人前端组件库至私有npm仓库的完整指南

文章目录 一、写组件1、注册全局组件方法2、组件13、组件2 二、测试三、发布1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 一、写组件 1、注册全局组件方法 plugins/index.js const requireComponent require.context(./, true, /\.vue$/…

idea常用配置

IDEA设置全局配置 参考&#xff1a;IDEA设置全局配置_idea如何打开一个项目,全局设置-CSDN博客 idea提交代码到git或svn上时&#xff0c;怎么忽略.class、.iml文件和文件夹等不必要的文件 参考&#xff1a;idea提交代码到git或svn上时&#xff0c;怎么忽略.class、.iml文件和文…