MySQL-SQL InnoDB引擎 (下)

news2024/11/15 23:39:10

♥️作者:小刘在C站

♥️个人主页: 小刘主页 

♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生!

♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术

♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSDN让你我相遇!

前言

上章讲到InnoDB引擎 (中)本章继续,链接这里

目录

4.3 undolog

4.3.1 介绍

4.3.2 版本链

A. 第一步

 B.第二步

 C. 第三步

4.4 readview

4.5 原理分析

4.5.1 RC隔离级别

A. 先来看第一次快照读具体的读取过程:

B. 再来看第二次快照读具体的读取过程:

4.5.3 RR隔离级别


MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

4.3 undolog

4.3.1 介绍

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

4.3.2 版本链

有一张表原始数据为:
DB_TRX_ID : 代表最近修改事务 ID ,记录插入这条记录或最后一次修改该记录的事务 ID ,是
自增的。
DB_ROLL_PTR : 由于这条数据是才插入的,没有被更新过,所以该字段值为 null
然后,有四个并发事务同时在访问这张表。

A. 第一步

 

当事务 2 执行第一条修改语句时,会记录 undo log 日志,记录数据变更之前的样子 ; 然后更新记录,
并且记录本次操作的事务 ID ,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。

 B.第二步

 

当事务 3 执行第一条修改语句时,也会记录 undo log 日志,记录数据变更之前的样子 ; 然后更新记
录,并且记录本次操作的事务 ID ,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。

 C. 第三步

 

当事务 4 执行第一条修改语句时,也会记录 undo log 日志,记录数据变更之前的样子 ; 然后更新记
录,并且记录本次操作的事务 ID ,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。

 

最终我们发现,不同事务或相同事务对同一条记录进行修改,会导致该记录的 undolog 生成一条
记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。

4.4 readview

ReadView (读视图)是 快照读 SQL 执行时 MVCC 提取数据的依据,记录并维护系统当前活跃的事务(未提交的) id
ReadView 中包含了四个核心字段:

 

而在 readview 中就规定了版本链数据的访问规则:
trx_id 代表当前 undolog 版本链对应事务 ID

 

不同的隔离级别,生成 ReadView 的时机不同:
READ COMMITTED :在事务中每一次执行快照读时生成 ReadView
REPEATABLE READ :仅在事务中第一次执行快照读时生成 ReadView ,后续复用该 ReadView

4.5 原理分析

4.5.1 RC隔离级别

RC 隔离级别下,在事务中每一次执行快照读时生成 ReadView
我们就来分析事务 5 中,两次快照读读取数据,是如何获取数据的 ?
在事务 5 中,查询了两次 id 30 的记录,由于隔离级别为 Read Committed ,所以每一次进行快照读
都会生成一个 ReadView ,那么两次生成的 ReadView 如下。

 

那么这两次快照读在获取数据时,就需要根据所生成的 ReadView 以及 ReadView 的版本链访问规则,到 undolog 版本链中匹配数据,最终决定此次快照读返回的数据。

A. 先来看第一次快照读具体的读取过程:

 

 在进行匹配时,会从undo log的版本链,从上到下进行挨个匹配:

 

trx_id 4 ,也就是将 4 带入右侧的匹配规则中。 ①不满足 ②不满足 ③不满足 ④也不满足 ,
都不满足,则继续匹配 undo log 版本链的下一条。

 

再匹配第三条 ,这条记
录对应的 trx_id 2 ,也就是将 2 带入右侧的匹配规则中。①不满足 ②满足 终止匹配,此次快照
读,返回的数据就是版本链中记录的这条数据。

B. 再来看第二次快照读具体的读取过程:

 在进行匹配时,会从undo log的版本链,从上到下进行挨个匹配:

trx_id 4 ,也就是将 4 带入右侧的匹配规则中。 ①不满足 ②不满足 ③不满足 ④也不满足 ,
都不满足,则继续匹配 undo log 版本链的下一条。

再匹配第二条 ,这条
记录对应的 trx_id 3 ,也就是将 3 带入右侧的匹配规则中。①不满足 ②满足 。终止匹配,此次
快照读,返回的数据就是版本链中记录的这条数据。

4.5.3 RR隔离级别

RR 隔离级别下,仅在事务中第一次执行快照读时生成 ReadView ,后续复用该 ReadView 。 而 RR 是可重复读,在一个事务中,执行两次相同的 select 语句,查询到的结果是一样的。

MySQL 是如何做到可重复读的呢 ? 我们简单分析一下就知道了

 

我们看到,在 RR 隔离级别下,只是在事务中第一次快照读时生成 ReadView ,后续都是复用该ReadView ,那么既然 ReadView 都一样, ReadView 的版本链匹配规则也一样, 那么最终快照读返回的结果也是一样的。
所以呢, MVCC 的实现原理就是通过 InnoDB 表的隐藏字段、 UndoLog 版本链、 ReadView 来实现的。而 MVCC + 锁,则实现了事务的隔离性。 而一致性则是由 redolog undolog 保证。

 

♥️关注,就是我创作的动力

♥️点赞,就是对我最大的认可

♥️这里是小刘,励志用心做好每一篇文章,谢谢大家

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

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

相关文章

【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

直播预约通道: 【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

朴素模式匹配算法(暴力寻找字串)

目录 0. 前言1. 算法简介2. 代码实现3. 运行结果 0. 前言 使用朴素模式匹配算法查找子串是否位于主串中 开发环境:Dev-Cpp 操作系统:Windows10 专业版 1. 算法简介 朴素模式匹配算法,也称为暴力模式匹配算法或穷举法,是一种简…

自己动手写C语言float浮点数转换字符串的函数

最近在项目中用到了holtek厂商的HT45F24A和BA45F5650两款单片机。 用的开发工具是HT-IDE3000,烧录软件是HOPE3000。 这两款单片机都是8位的单片机,支持寄存器位操作。 HT45F24A单片机不带UART串口,要想实现串口功能,只能自己用定时…

基于肺部图片与文本信息的多模态模型架构

文章题为 「A transformer-based representation learning model with unified processing of multimodal input for clinical diagnostics」 https://www.nature.com/articles/s41551-023-01045-x (arXiv版链接: https://arxiv.org/abs/2306.00864) htt…

2020年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

2020 级考研管理类联考数学真题 一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。 1、某产品去年涨价 10%&#xf…

备战2024秋招面试题-Vue的框架原理

前言: \textcolor{Green}{前言:} 前言: 💞快秋招了,那么这个专栏就专门来记录一下,同时呢整理一下常见面试题 💞部分题目来自自己的面试题,部分题目来自网络整理 给我冲 学习目标&am…

阿里云服务器ECS介绍_云主机_服务器托管_弹性计算

阿里云服务器安全可靠、弹性可伸缩,CPU可选256核、内存选到3072GB,云服务器ECS规格通用型、计算型、内存型、通用算力型、裸金属、GPU、大数据等ECS实例规格,公网带宽可选到200M,绑定弹性公网EIP带宽可达1000M,共享带宽…

9.外部中断

1.中断概念: (1)STM32的每个IO口都可以作为外部中断输入; (2)stm32的中断控制器支持19个外部中断/事件请求 线0~15:对应外部IO口的输入中断;线16:连接到PVD输出&#…

基于jsp+Servlet+mysql的汽车销售系统

基于jspServletmysql的汽车销售系统 一、系统介绍二、功能展示1.项目骨架2.登录界面3.首页4.购物车5.添加车辆6、编辑车辆信息 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的汽车销售系统 项目架…

新后端漏洞之----SSRF漏洞(服务端请求伪造)

笔记 前言SSRF漏洞概述SSRF漏洞检测与挖掘SSRF漏洞的回显分类SSRF漏洞利用SSRF漏洞防御 前言 这几天各种技术面试接踵而至,压得我喘不过气了!然后面试官问了我这个SSRF漏洞原理和利用方式以及防御手段,当然同时还问了好几个Top10漏洞&#x…

【React】React Hooks解析

React Hooks解析 React 16.8 认识和体验Hooks 为什么需要Hook? Hook是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期) 我们先来思考一下class组件相对于函数式组件有什么优势&…

企业知识竞赛答题pk活动怎么做?

随着互联网的发展,越来越多的企事业单位开始利用答题小程序进行线上PK答题活动,目的在于组织员工学习企业文化或是进行专题答题活动以适应时代的进步。其中最主流的有:网络安全知识竞赛、安全生产知识竞赛、企业文化PK答题竞赛、红色党史知识…

js中的树以及优先遍历!

树 什么是树? 在生活中,大家对树肯定不陌生,小朋友都知道树不就是一类植物嘛,不管在任何地方都有各种各样的树。但是在计算机科学里面树是什么呢?一种分层数据的抽象模型,在我们前端工作中无处不在。在 J…

攻克数据中心液冷升级三大难题,宁畅推出“无忧焕液计划“

近年来,在政策引导、市场需求、技术升级等多种因素影响下,数据中心正在迎来发展新机遇。如何部署节能技术并兼顾算效、能耗、成本,成为考验数据中心建设与运营者的关键。 在此背景下,宁畅于6月28日召开“无忧焕液 智惠升级”媒体沟…

epoll反应堆

// epoll基于非阻塞I/O事件驱动 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/epoll.h> #inclu…

利用Python分析快手APP全国大学生用户数据

背景 背景&#xff1a;利用Python分析快手APP全国大学生用户数据&#xff0c;发现&#xff1a; 哪个学校的学生最喜欢使用快手APP Android、IOS、PC三大平台用户占比份额 全国哪些城市(学校所在地)的学生使用频次最高 全国哪些省份的生源最喜欢使用快手APP … 数据&#xff1a…

形式化验证,Gap-free Processor Verifification by S2QED and Property Generation(一)

目录 一、Article:文献出处&#xff08;方便再次搜索&#xff09; &#xff08;1&#xff09;作者 &#xff08;2&#xff09;文献题目 &#xff08;3&#xff09;文献时间 &#xff08;4&#xff09;引用 二、Data:文献数据&#xff08;总结归纳&#xff0c;方便理解&am…

不漏测,测试人员的极致追求

一、什么是漏测&#xff1f; 具体地说&#xff0c;什么是测试漏测&#xff1f;测试漏测是指软件产品在测试结束后出现了在测试过程中没有被发现的bug。 我们知道&#xff0c;漏测是每一个软件测试者最头疼的事&#xff0c;一旦出现漏测&#xff1a; 首先给客户带来了非常不好…

C语言-基础语法学习-3 二级指针

目录 二级指针二级指针的定义和声明二级指针的初始化二级指针的使用二级指针和函数参数二级指针和动态内存分配数组指针二维数组二维数组的初始化二维数组与指针二维数组的遍历 二级指针 当涉及到多级指针时&#xff0c;C语言的灵活性和强大的指针功能可以得到充分的发挥。二级…

Xshell弹窗:需要Xmanager软件来处理X11转发请求(解决办法:关闭X11转发)

文章目录 问题背景问题分析什么是X11转发&#xff1f;分析原因&#xff08;没分析出来&#xff09; 解决办法&#xff08;关闭X11转发&#xff09;参考文章 问题背景 今天我在ubuntu服务器上用python flask框架做了个http服务程序&#xff0c;我用xshell连接服务器并执行该服务…