Mysql底层原理十一:Mvcc

为什么要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.mzph.cn/news/797636.shtml

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

相关文章

VLAN 与 VXLAN:一个字母之差,到底两者有什么区别?

来源:网络技术联盟站 网络虚拟化技术在现代网络架构中扮演着至关重要的角色,而其中的两个重要代表——虚拟局域网(VLAN)和虚拟扩展局域网(VXLAN)——在网络管理和扩展性方面发挥着独特的作用。本文将深入研…

加拿大公司注册好处 注册加拿大公司条件 注册加拿大公司流程

一、加拿大公司注册优势 1、开办成本低:加拿大的注册费用相对较低,注册一家公司所需资金较少。 2、法律保护完善:加拿大的法律体系健全,对企业的合法权益给予充分保护。 3、政 府扶持政策:加拿大政 府鼓励企业创新发…

LeetCode-1483. 树节点的第 K 个祖先【树 深度优先搜索 广度优先搜索 设计 二分查找 动态规划】

LeetCode-1483. 树节点的第 K 个祖先【树 深度优先搜索 广度优先搜索 设计 二分查找 动态规划】 题目描述:解题思路一:暴力解法会超时!【一级一级往上跳,效率太低】解题思路二:倍增,利用二进制运算&#xf…

深入理解Android中的startActivity过程

文章目录 1. 发起startActivity请求2. 处理startActivity请求3. 创建目标Activity的进程4. 实例化目标Activity5. 显示目标Activity6. 处理Activity切换动画7. 处理返回结果8. 处理异常 Android操作系统中的Activity是应用程序的基本组成单元,负责与用户进行交互。当…

gin框架提高篇(三)

多服务器程序运行 package mainimport ("fmt""github.com/gin-gonic/gin""golang.org/x/sync/errgroup""net/http""time" )var g errgroup.Group // 使用 errgroup.Group 来并发启动这两个服务器func main() {// 服务器1se…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 结构体作为一种数据结构,其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

HarmonyOS 应用开发之wrapBuilder:封装全局@Builder

全局Builder作为wrapBuilder的参数返回WrappedBuilder对象&#xff0c;实现 全局Builder 可以进行赋值和传递。 说明&#xff1a; 从API version 11开始使用。 接口说明 wrapBuilder是一个模板函数&#xff0c;返回一个WrappedBuilder对象。 declare function wrapBuilder<…

机器学习数据预处理—统计分析方法

数据预处理 1 数据规范化 量纲&#xff0c;指将一个物理导出量用若干基本量的乘方之积表示出来的表达式。数据的比较需要关注两点——绝对数值和量纲&#xff0c;而特征间因为量纲的存在导致无法直接通过绝对数值比较大小&#xff0c;也就无法判断特征间的重要性。例如若某个…

算法:树形dp(树状dp)

文章目录 一、树形DP的概念1.基本概念2.解题步骤3.树形DP数据结构 二、典型例题1.LeetCode&#xff1a;337. 打家劫舍 III1.1、定义状态转移方程1.2、参考代码 2.ACWing&#xff1a;285. 没有上司的舞会1.1、定义状态转移方程1.2、拓扑排序参考代码1.3、dfs后序遍历参考代码 一…

刷题之Leetcode209题(超级详细)

209.长度最小的子数组 力扣题目链接(opens new window)https://leetcode.cn/problems/minimum-size-subarray-sum/ 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条…

0074__windows日志捕获工具-DebugView使用教程

windows日志捕获工具-DebugView使用教程-CSDN博客

数据可视化高级技术Echarts(快速上手柱状图进阶操作)

目录 1.Echarts的配置 2.程序的编码 3.柱状图的实现&#xff08;入门实现&#xff09; 相关属性介绍&#xff08;进阶&#xff09;&#xff1a; 1.标记最大值/最小值 2.标记平均值 3.柱的宽度 4. 横向柱状图 5.colorBy series系列&#xff08;需要构造多组数据才能实现…

以动态库链接库 .dll 探索结构体参数

Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后&#xff0c;尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个&#xff0c;dll.dll是上面提到…

C-偶遇行军蚁(遇到过的题,做个笔记)

我的代码: 思路就是把每一行看成一个字符串&#xff0c;然后逐渐增加字符就行 #include <iostream> #include <vector> using namespace std; int main() {string s;int n;cin >> n; //读入行数cin >> s; //读入字符串vector<string>arr(n…

一点点金融

一点点金融 价值投资 需求 > 有限 > 不可逆 > 优势 > 长期持有者多趋势分析 改进MACD策略&#xff0c;使用涨跌幅比值RSI计算MACD原始MACD计算改进思路&#xff1a;使用涨跌幅比值RSI计算MACD 价值投资 需求 > 有限 > 不可逆 > 优势 > 长期持有者多…

[pyenv] 1. 安装与使用

在看了几个开源的python环境管理器的评论后, 我打算入手 pyenv, 该项目有以下几个优势: 该项目使用纯shell脚本语言实现, 天然亲和linux开发环境.通过设置的PATH环境变量和shims方法隔离的实现方案非常轻量化.子命令引入了compgen补全功能, 对命令输入操作友好.源码开源, 可扩展…

《pytorch深度学习实战》学习笔记第2章

第2章 预训练网络 讨论3种常用的预训练模型&#xff1a; 1、根据内容对图像进行标记&#xff08;识别&#xff09; 2、从真实图像中生成新图像&#xff08;GAN&#xff09; 3、使用正确的英语句子来描述图像内容&#xff08;自然语言&#xff09; 2.1 获取一个预训练好的网络…

通过 Cookie、Redis共享Session 和 Spring 拦截器技术,实现对用户登录状态的持有和清理(三)

本篇内容对应 “2.4 生成验证码” 小节 和 “4.7 优化登陆模块”小节 视频链接 1 Kaptcha介绍 Kaotcga是一个生成验证码的工具。 你的网站验证码是什么&#xff1f; 在我们这个牛客论坛项目&#xff0c;验证码分为两部分 给用户看的是图片&#xff0c;用户根据图片上显示的…

精进TypeScript--【类型设计】倾向选择总是代表有效状态的类型

如果你看不到代码所操作的数据或数据类型&#xff0c;代码就很难理解。这就是类型系统的一大优势&#xff1a;通过写出类型&#xff0c;让你的代码的读者可以看到它们&#xff0c;而且这也将使得你的代码变得易懂。 要记住的事情&#xff1a; 既代表有效状态又代表无效状态的类…

Java基础知识总结(42)

&#xff08;1&#xff09;Java关键字的相关知识进行了复习 考试过程中“main”是主方法名&#xff0c;而不是Java关键字 &#xff08;2&#xff09;类型转换 当一个算术表达式中包含多个基本类型的值时&#xff0c;整个算术表达式的数据类型将发生自动提升&#xff0c;所有的b…