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

Mysql学习之MVCC解决读写问题

多版本并发控制

什么是MVCC
MVCC (Multiversion Concurrency Control)多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。

快照读与当前读
在这里插入图片描述
在这里插入图片描述
再谈隔离级别
在这里插入图片描述

MVCC 可以不采用锁机制,而是通过乐观锁的方式来解决不可重复读和幻读问题!它可以在大多数情况下替代行级锁,降低系统的开销。
在这里插入图片描述
隐藏字段、Undo Log 版本链
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MVCC实现原理之ReadView

MVCC的实现依赖于:隐藏字段、Undo log版本链、ReadView
什么是ReadView?
在MVCC机制中,多个事务对同一个行记录进行更新会产生多个历史快照,这些历史快照保存在Undo Log里**。如果一个事务想要查询这个行记录,需要读取哪个版本的行记录呢?这时就需要用到ReadView了**,它帮助我们解决了行的可见性问题。
ReadView就是事务在使用MVCC机制进行快照读操作时产生的读视图。当事务启动时,会生成数据库系统当前的一个快照,InnoDB为每个事务构造了一个数组,用来记录并维护系统当前活跃事务的ID(“活跃”指的就是,启动了但还没提交)
设计思路
在这里插入图片描述
ReadView要解决的主要问题就是需要判断一下版本链中的哪个版本是当前事务可见的。
在这里插入图片描述
在这里插入图片描述
ReadView的规则
有了ReadView,在访问某条记录时,只需要按照下面的步骤判断记录的某个版本是否可见。

  • 如果被访问版本的trx_id属性值与ReadView中的creator_trx_id值相同,意味着当前事务在访问它自己修改过的记录,所以该版本可以被当前事务访问。

  • 如果被访问版本的trx_id值小于ReadView中的up_limit_id值,表明生成该版本的事务在当前事务生成ReadView前已提交,所以该版本可以被当前事务访问。

  • 如果被访问版本的trx_id值大于或等于ReadView中low_limit_id值,表明生成该版本的事务在当前事务生成的ReadView后才开启,所以该版本不可以被当前事务访问。

  • 如果被访问版本的trx_id值在ReadView的up_limit_id和low_limit_id之间,那就需要判断一下trx_id属性值是不是在trx_ids列表中。

    如果在,说明创建ReadView时生成该版本的事务还是活跃的,该版本不可以被访问。
    如果不在,说明创建ReadView时生成该版本的事务已经被提交,该版本可以被访问。

MVCC整体操作流程

在这里插入图片描述
事务的隔离级别为读已提交时,一个事务中的每一次SELECT查询都会重新获取一次Read View。
在这里插入图片描述
事务隔离级别为可重复读时,就避免了不可重复读。这是因为一个事务只在第一次SELECT的时候会获取一次Read View,而后面的所有的SELECT都会复用这个Read view。
在这里插入图片描述
举例说明
在这里插入图片描述
READ COMMITTED 隔离级别下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后,把事务id为10的事务提交
在这里插入图片描述
在这里插入图片描述
这个时候再读一次:
在这里插入图片描述执行过程分析:
在这里插入图片描述
在这里插入图片描述
REPEATABLE READ隔离级别下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何解决幻读?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结

在这里插入图片描述
在这里插入图片描述
B站链接

相关文章:

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC (Multiversion Concurrency Control)多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…...

Linux下如何生成coredump文件

引言 在linux下执行程序,当出现coredump时,却发现没有生成core文件,或者生成了core文件却不知道在哪里,下面就讲述如何产出core文件,以及指定core文件的产出格式与路径。 打开core文件的大小限制 ulimit -c unlimit…...

eltable 合计行添加tooltip

eltable 合计行添加tooltip 问题描述: eltable 合计行单元格内容过长会换行,需求要求合计行数据超长显示 … ,鼠标 hover 时显示提示信息。 解决方案:eltable合计行没有对外的修改接口,想法是 自己实现一个tooltip&a…...

Secure Boot(安全启动)

Secure Boot(安全启动)的原理基于链式验证,这是一种确保计算机在启动过程中只加载和执行经过认证的软件的机制。这个过程涉及到硬件、固件和操作系统的多个层面。以下是Secure Boot的基本原理: 密钥和证书:Secure Boot…...

大厂面试经验:如何对加密后的数据进行模糊查询操作

加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路。 为了数据安全我们在开发过程中经常会对重要的数据进行加密存储,常见的有:密码、手机号、电话号码、详细地址、银行卡号、信用卡验证码等信息…...

修改docker默认存储位置【高版本的docker】

一、修改docker默认存储位置 1、停服务 systemctl stop docker 2、修改/etc/docker/daemon.json添加新的dcoker路径 如"data-root": "/mnt/hdd1/docker" 3、保存后重启服务:systemctl restart docker 二、其他服务的命令 systemctl disab…...

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具,它具备一系列强大的功能,可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点: 智能清理:CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…...

吴恩达机器学习全课程笔记第四篇

目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇,第三篇笔记请见: 吴恩达机器学习全课程笔记第…...

大数据分析师常用函数

常用函数 当进行大数据分析时,SQL中的函数非常丰富,以下是更详细的展开: 窗口函数 (Window Functions): ROW_NUMBER(): 为结果集中的每一行分配一个唯一的整数,用于排序。RANK(): 为结果集中的每一行分配一个排名,相同值会有相同的排名,但会跳过相同排名数量。DENSE_RAN…...

MySQL 主从读写分离入门——基本原理以及ProxySQL的简单使用

一、读写分离工作原理 读写分离的工作原理:在大型网站业务中,当单台数据库无法满足并发需求时,通过主从同步方式同步数据。设置一台主服务器负责增、删、改,多台从服务器负责查询,从服务器从主服务器同步数据以保持一…...

ROS2从入门到精通:理论与实战

ROS是什么? 随着人工智能技术的飞速发展与进步,机器人的智能化已经成为现代机器人发展的终极目标。机器人发展的速度在不断提升,应用范围也在不断拓展,例如自动驾驶、移动机器人、操作机器人、信息机器人等。机器人系统是很多复杂…...

docker 安装minio 一脚shell脚本

要创建一个用于安装Minio的Docker的Shell脚本,你可以按照以下步骤进行。这个脚本会执行以下操作: 拉取Minio的Docker镜像。创建一个Docker容器并映射端口。设置Minio的访问密钥和秘密密钥。持久化存储数据到本地目录。 以下是一个简单的Shell脚本示例&…...

【数据库】mybatis使用总结

文章目录 1. 批量插入、检索<foreach>2. <if> 判断等于情况3. 模糊查询(pgsql为例)4. 分页5. <resultMap > 中collection 和association 6. no conflict do update 1. 批量插入、检索<foreach> <insert id"insertSystemService" >in…...

VR元宇宙的概念|VR体验店加盟|虚拟现实设备销售

VR元宇宙是一个结合了虚拟现实&#xff08;Virtual Reality&#xff09;和增强现实&#xff08;Augmented Reality&#xff09;等技术的概念&#xff0c;代表着一个虚拟的多维度世界。它是一个由数字化的空间构成的虚拟环境&#xff0c;可以通过虚拟现实设备进行交互和探索。 元…...

MySQL进阶:全局锁、表级锁、行级锁总结

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;MySQL进阶&#xff1a;MySQL事务、并发事务问题及隔离级别 &#x1f4da;订阅专栏&#xff1a;MySQL进阶 希望文章对你们有所帮助…...

Python用函数实现代码复用

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 生命对某些人来说是美丽的&#xff0c…...

2024年腾讯云优惠代金券领取入口整理汇总,收藏级笔记

腾讯云优惠代金券领取入口共三个渠道&#xff0c;腾讯云新用户和老用户均可领取8888元代金券&#xff0c;可用于云服务器等产品购买、续费和升级使用&#xff0c;阿腾云atengyun.com整理腾讯云优惠券&#xff08;代金券&#xff09;领取入口、代金券查询、优惠券兑换码使用方法…...

nn.Linear() 使用提醒

原本以为它是和nn.Conv2d()一样&#xff0c;就看第二个维度的数值&#xff0c;今天才知道&#xff0c;它是只看最后一个维度的数值&#xff01;&#xff01;&#xff01; 例子1 Descripttion: Result: Author: Philo Date: 2024-02-27 14:33:50 LastEditors: Philo LastEditT…...

python difflib --- 计算差异的辅助工具

此模块提供用于比较序列的类和函数。 例如&#xff0c;它可被用于比较文件&#xff0c;并可产生多种格式的不同文件差异信息&#xff0c;包括 HTML 和上下文以及统一的 diff 数据。 有关比较目录和文件&#xff0c;另请参阅 filecmp 模块。 class difflib.SequenceMatcher 这…...

HTML5浮动

1.标准文档流组成 块级元素&#xff08;block&#xff09; 内联元素&#xff08;inline&#xff09; 2.display属性 作用&#xff1a;指定HTML标签的显示方式 常用属性 值 说明 block 块级元素的默认值&#xff0c;元素会被显示为块级元素&#xff0c;该元素前后会带有换行…...

bh3_login_simulation-memories:崩坏3多渠道服桌面端扫码登录完整指南

bh3_login_simulation-memories&#xff1a;崩坏3多渠道服桌面端扫码登录完整指南 【免费下载链接】bh3_login_simulation-memories 轻巧的崩坏3渠道服桌面端扫码登陆解决方案 项目地址: https://gitcode.com/gh_mirrors/bh/bh3_login_simulation-memories 崩坏3作为一款…...

SkillLite 多入口架构实战:CLI / Python SDK / MCP / Desktop / Swarm 一页理清

摘要 SkillLite 是轻量级 AI Agent Skills 执行引擎&#xff1a;同一套 Rust workspace 拆分多 crate&#xff0c;向上提供「开箱即用的 Agent 产品」与「可嵌入的安全执行内核」。集成方既可通过终端 CLI 与 MCP 接入 IDE&#xff0c;也可在 Python 中调用 scan_code、execut…...

OPUS编解码器在audio DSP上的移植和应用林

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时&#xff0c;输出结果中包含大量由集群自动生成的元数据&#xff08;如 managedFields、resourceVersion、uid 等&#xff09;。这些信息在实际复用 yaml 清单时需要手动清理&#xff0c;增加了额外的工作量。 使用 kube…...

MICROCHIP微芯 24AA02UIDT-I/OT SOT23 EEPROM

特性: 预编程的32位序列号: 在所有UID系列EEPROM中唯一 可扩展至48位、64位、128位、256位及其 他长度 单电源供电&#xff0c;工作电压低至1.7V 低功耗CMOS技术: -读取电流最大为1mA。 -待机电流最大1A。 2线串行接口&#xff0c;兼容12CTM Schmitt触发输入用于噪声抑制 输出斜…...

前端动画:别让你的页面像块木头一样僵硬

前端动画&#xff1a;别让你的页面像块木头一样僵硬 什么是前端动画&#xff1f; 前端动画是指在前端页面中添加的动态效果&#xff0c;让页面更加生动有趣。别以为动画只是花里胡哨的东西&#xff0c;好的动画可以提升用户体验&#xff0c;让你的应用脱颖而出。 为什么需要动画…...

LDPC码实战:用Python对比比特翻转(BF)与和积(SPA)算法,谁更强?

LDPC码算法对决&#xff1a;Python实战比特翻转与和积译码性能全解析 在通信系统设计与优化过程中&#xff0c;LDPC码作为接近香农极限的高性能编码方案&#xff0c;其译码算法的选择直接影响系统性能与实现成本。本文将带您深入两种经典译码算法——比特翻转(BF)与和积(SPA)的…...

GLM-5.1 月卡 99 元无限 Token:是真香还是割韭菜?实测避坑指南GLM-5.1 月卡 99 元无限 Token:是真香还是割韭菜?实测避坑指南

GLM-5.1 月卡 99 元无限 Token&#xff1a;是真香还是割韭菜&#xff1f;实测避坑指南 先说结论&#xff1a;适合特定人群&#xff0c;但坑点不少&#xff0c;入手前必须看清条款。 最近智谱 GLM-5.1 推出了 99.9 元/月的"无限 Token"订阅方案&#xff0c;在开发者圈…...

微信小程序订阅消息避坑指南:为什么你的订阅弹窗总被拒绝?

微信小程序订阅消息设计实战&#xff1a;提升用户同意率的7个黄金法则 去年双十一大促期间&#xff0c;某头部电商小程序因为订阅消息弹窗设计不当&#xff0c;导致用户投诉率激增300%&#xff0c;最终被微信官方临时封禁消息推送功能一周——这个真实案例揭示了订阅消息设计的…...

掌握PerfView:ETW与EventPipe数据模型的终极指南

掌握PerfView&#xff1a;ETW与EventPipe数据模型的终极指南 【免费下载链接】perfview PerfView is a CPU and memory performance-analysis tool 项目地址: https://gitcode.com/gh_mirrors/pe/perfview PerfView是一款强大的CPU和内存性能分析工具&#xff0c;它能够…...

uniapp安卓调试进阶:用Chrome开发者工具调试手机Webview页面(2023最新版)

Uniapp安卓Webview深度调试指南&#xff1a;Chrome DevTools实战解析 在混合应用开发领域&#xff0c;Uniapp凭借其跨平台优势已成为移动开发的热门选择。但当应用内嵌Webview页面出现样式错乱、接口异常或性能瓶颈时&#xff0c;仅靠基础调试工具往往难以快速定位问题根源。本…...