InnoDB 引擎 底层逻辑

news2024/12/27 12:43:23

目录

0 课程视频

1 逻辑存储结构

1.1 结构图

1.2 表空间 -> 记录 索引 存储记录 等数据

1.2.1 储存在 cd/var/lib/mysql -> ll -> 目录 mysql.ibd

1.3 段 -> 索引 存储记录 具体存储

1.3.1 数据段 b+树 叶子节点

1.3.2 索引段 b+树的 非叶子节点

1.3.3 回滚段

1.3 区 -> 1M = 16k * 64页

1.4 页 -> 磁盘管理最新单元

1.5 行 -> 数据存储

1.6 InnoDB引擎每次从磁盘申请4-5个区 ->保证页连续性

2 架构

2.1 架构图

2.2.1 架构逻辑图

2.1.2 文件夹文件图

2.2 内存架构

2.2.1 缓冲池 -> 没数据从磁盘加载 -> 缓存经常操作的数据

2.2.2 缓冲池的页page->链表管理-> 空闲/被使用/脏页

2.2.3 更改缓冲池  ->非唯一的二级索引页 -> 结构图详解更改缓冲池

2.2.4 自适应哈希索引 -> 哈希非范围查询快 -> 系统自动判定用不用哈希索引 ->优化

2.2.5 log buffer ->定期刷新到磁盘 -> 默认16M

2.3 磁盘架构

2.3.1 系统表空间 -> cd /var/lib/mysql -> ll -> 数据库名

2.3.2 独立表空间 -> /var/lib/mysql -> ll -> cd 数据库名 ->各个表空间 -> 默认开启 

2.3.3 自定义 通用表空间 -> 创建idb ->cd /var/lib/mysql 文件夹下

 2.3.4 双写缓冲区文件 -> 内存刷新到磁盘前 写入 -> 系统异常时恢复数据

2.4 后台线程 -> 内存数据 刷新策略 -> 磁盘

2.4.1 Master Thread 主线程-

        2.4.1.1 调度其他线程

        2.4.1.2 异步刷新到磁盘

        2.4.1.3 脏页刷新/合并插入缓冲

        2.4.1.4 undo页回收

2.4.2 IO Thread -> 调度 大量的AIO请求

2.4.3 Purge Thread -> 回收事务已提交的 undo log

2.4.4 Page Cleaner Thead -> 协助Master Thread 脏页刷新到磁盘 ->减少阻塞

 2.5 查看 InnoDB 状态信息

3 事务原理

3.1 事务

3.1.1 原子性  ->整体 ->全成功 /全失败 

3.1.2 一致性 -> 所有数据保存一致 

3.1.3 持久性 ->提交 /回滚 -> 数据永久改变 

3.1.4 隔离性 -> 不受外部并发影响 -> 锁 / MVCC

3.2 redo log -> 刷新到磁盘出错 ->调用redo log再次尝试

3.2.1 流程图 ->一致性 持久性

3.3 undo log -> 回滚日志 / 多版本并发控制

3.3.1 如insert操作 -> 记录反向delete操作 -> 回滚用

3.3.2 详细介绍

4 mvcc 多版本并发控制 -> 数据被修改形成多个版本

4.1 课程视频

4.2 

4.2.1 当前读

4.2.2 快照读

4.3 MVVC 实现原理

4.3.1 隐式字段 -> 事务 成功处理

4.3.2 ibd文件查看隐式字段 -> ibd2sdi stu.ibd

4.3.4 undo log -> 记录变更之前数据

4.4.4 undo log 工作流程图 ->版本链

 4.4.5 readview 比较各个版本的id值 判定相应版本数据 是否可用

4.4.6 MVCC RC工作流程图

 4.4.7 MVCC RR可重复读 工作流程图


0 课程视频

https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=133&spm_id_from=pageDriver&vd_source=ff8b7f852278821525f11666b36f180a

1 逻辑存储结构

1.1 结构图

1.2 表空间 -> 记录 索引 存储记录 等数据

1.2.1 储存在 cd/var/lib/mysql -> ll -> 目录 mysql.ibd

cd/var/lib/mysql --> mysql.ibd 文件
cd 表名/ -->都是ibd 表空间文件

1.3 段 -> 索引 存储记录 具体存储

1.3.1 数据段 b+树 叶子节点

1.3.2 索引段 b+树的 非叶子节点

1.3.3 回滚段

1.3 区 -> 1M = 16k * 64页

1.4 页 -> 磁盘管理最新单元

1.5 行 -> 数据存储

1.6 InnoDB引擎每次从磁盘申请4-5个区 ->保证页连续性

2 架构

2.1 架构图

2.2.1 架构逻辑图

2.1.2 文件夹文件图

2.2 内存架构 ->服务器80%内存都会分配给缓冲区

2.2.1 缓冲池 -> 没数据从磁盘加载 -> 缓存经常操作的数据

2.2.2 缓冲池的页page->链表管理-> 空闲/被使用/脏页

2.2.3 更改缓冲池  ->非唯一的二级索引页 -> 结构图详解更改缓冲池

2.2.4 自适应哈希索引 -> 哈希非范围查询快 -> 系统自动判定用不用哈希索引 ->优化

2.2.5 log buffer ->定期刷新到磁盘 -> 默认16M

innodb_log_buffer_size: 大小值
innodb_flush_log_at_trx_commit: 日志刷新到磁盘的时机 
0 --> 每次事务提交则IO 
1 --> 每秒IO
2 -->每次提交事务IO 并 每秒IO

show variables like '%log_buffer_size%'; -->查询日志缓冲区大小
show variables like '%flush_log%';

2.3 磁盘架构

2.3.1 系统表空间 -> cd /var/lib/mysql -> ll -> 数据库名

2.3.2 独立表空间 -> /var/lib/mysql -> ll -> cd 数据库名 ->各个表空间 -> 默认开启 

show variables like '%file_per_table%'; // 查看开启状态

2.3.3 自定义 通用表空间 -> 创建idb ->cd /var/lib/mysql 文件夹下

create tablespace xxx表空间名字 add datafile '对应的磁盘文件名.ibd' engine = innodb ;

 2.3.4 双写缓冲区文件 -> 内存刷新到磁盘前 写入 -> 系统异常时恢复数据

2.4 后台线程 -> 内存数据 刷新策略 -> 磁盘

2.4.1 Master Thread 主线程-

        2.4.1.1 调度其他线程

        2.4.1.2 异步刷新到磁盘

        2.4.1.3 脏页刷新/合并插入缓冲

        2.4.1.4 undo页回收

2.4.2 IO Thread -> 调度 大量的AIO请求

ps: aio 异步非阻塞IO

2.4.3 Purge Thread -> 回收事务已提交的 undo log

2.4.4 Page Cleaner Thead -> 协助Master Thread 脏页刷新到磁盘 ->减少阻塞

 2.5 查看 InnoDB 状态信息

show engine innodb status ;

 

3 事务原理

3.1 事务

3.1.1 原子性  ->整体 ->全成功 /全失败 

3.1.2 一致性 -> 所有数据保存一致 

3.1.3 持久性 ->提交 /回滚 -> 数据永久改变 

3.1.4 隔离性 -> 不受外部并发影响 -> 锁 / MVCC

3.2 redo log -> 刷新到磁盘出错 ->调用redo log再次尝试

3.2.1 流程图 ->一致性 持久性

3.3 undo log -> 回滚日志 / 多版本并发控制

3.3.1 如insert操作 -> 记录反向delete操作 -> 回滚用

3.3.2 详细介绍

4 mvcc 多版本并发控制 -> 数据被修改形成多个版本

4.1 课程视频

https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=141&spm_id_from=pageDriver&vd_source=ff8b7f852278821525f11666b36f180a

4.2 

4.2.1 当前读

4.2.2 快照读

4.3 MVVC 实现原理

4.3.1 隐式字段 -> 事务 成功处理

 

4.3.2 ibd文件查看隐式字段 -> ibd2sdi stu.ibd

centos ->cd 到mysql  -> ibd2sdi stu.ibd 

4.3.4 undo log -> 记录变更之前数据

4.4.4 undo log 工作流程图 ->版本链

 

 4.4.5 readview 比较各个版本的id值 判定相应版本数据 是否可用

 

4.4.6 MVCC RC工作流程图

 4.4.7 MVCC RR可重复读 工作流程图

 

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

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

相关文章

Java 基础入门篇(一)——— Java 概述

文章目录 一、Java 概述二、Java 的产品 JDK2.1 JDK 安装2.2 Java与 Javac 介绍2.3 Java 程序的开发步骤 三、Java 程序的执行原理四、JDK 的组成五、Java 的跨平台工作原理 一、Java 概述 Java 是 sun 公司在 1995 年推出的一门计算机高级编程语言,其语言风格接近人…

javaEE+mysql学生竞赛管理系统

本系统是基于JAVA平台开发的一套学生竞赛信息管理的系统。系统采用JSP为编程语言。数据库采用Mysql建立数据之间的转换。论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。 本课题的目的是使…

none模式配置网络操作

基于Docker引擎启动Nginx WEB容器,默认以None方式启动Docker容器,此处使用pipework工具手工给容器指定桥接网卡,并且手工配置IP地址,操作指令如下: #查看镜像列表; docker images#运行新的容器 docker ru…

【Python】【进阶篇】17、如何配置settings.py文件

目录 17、如何配置settings.py文件1) 修改语言与时区配置2) 设置时区不敏感3) 配置项目所需数据库4)学会阅读报错信息 17、如何配置settings.py文件 《settings.py配置文件详解》一文中,将 settings.py 配置文件的每一项给大家做了介绍。在开发的过程中…

MYSQL进阶02

MYSQL进阶02 数据类型char与varchartext与blob浮点数与定点数日期类型的选择 数据类型 char与varchar char和varchar类型类似,都用来存储字符串,但是他们保存和检索的方式不同。char属于固定长度的字符类型,而varchar属于可变长度的字符类型…

JavaWeb学习--RequestResponse

目录 JavaWeb学习--Request&Response 1,Request和Response的概述 request:获取请求数据 response:设置响应数据 **小结** 2,Request对象 **小结** 2.2 Request获取请求数据 **小结** 2.4 请求参数中文乱码问题 URL编码 2.5 Request请求转…

c提高学习——选择排序算法

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h>//选择排序 void mySort(int arr[], int len) {for (int i 0; i < len; i){//认定i是最小值的下标int min i;for (int j i1; j < len; j){if (arr[min…

ABTEST平台建设思路与方案

导读 ABTest的作用&#xff1a; 用ABTEST的结果数据&#xff0c;论证是因为某个业务方案的调整&#xff0c;对产品能力的影响。ABTEST是一个过程&#xff0c;只是为了证明改动的效果&#xff0c;其最终的阶段一定是对某个方案进行推全结束实验&#xff0c;避免稳定的业务流程…

STM32的位带操作

STM32的位带操作 为什么需要位带操作&#xff1f; 因为编程需要操作某个bit位来达到我们想要的功能&#xff0c;比如点灯需要操作GPIOA->ODR 的某个bit假设是第2bit&#xff0c;写1就可以让GPIO输出一个高电平。 GPIOA->ODR | 1<<2;这样写其实有三个隐含的操作…

SpringSecurity-从入门到精通

SpringSecurity从入门到精通 一、简介1.1 官网介绍1.2 认证与授权 二、使用步骤2.1 快速入门2.2 认证流程2.3 相关概念 三、解决问题3.1 思路分析3.2 准备工作3.3 具体实现3.4 加密存储3.5 登录接口3.6 认证过滤器 一、简介 1.1 官网介绍 SpringSecurity 是一个强大且高度自定…

Stable Diffusion-生式AI的新范式

! 扩散模型&#xff08;Stable Diffusion)现在是生成图像的首选模型。由于扩散模型允许我们以提示( prompts)为条件生成图像&#xff0c;我们可以生成我们所选择的图像。在这些文本条件的扩散模型中&#xff0c;稳定扩散模型由于其开源性而最为著名。 在这篇文章中&#xff0…

通用智能的瓶颈及可能的解决途径

通用智能是指能够在各种不同的任务和环境中灵活地适应和执行任务的智能。通用智能与特定任务的智能相反&#xff0c;后者只能在特定领域或任务中表现出色。通用智能的理论基础是人工智能领域的通用人工智能&#xff08;AGI&#xff09;研究&#xff0c;旨在设计出能够像人类一样…

【Java笔试强训 5】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;统计回文…

Zynq-7000、FMQL45T900的GPIO控制(三)---linux管脚编号计算

本文主要对在Linux下使用zynq-7000或者FMQL45T900控制MIO/EMIO 首先内核配置项 如下&#xff0c;这个不用太多关注&#xff0c;一般都是默认打开的 CONFIG_GPIO_SYSFSy CONFIG_SYSVIPCy CONFIG_GPIO_ZYNQy两者的控制都是流程都是一样的&#xff0c;在细节上又区别 首先都在…

Go | 一分钟掌握Go | 9 - 通道

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 在Java中&#xff0c;多线程之间的通信方式有哪些&#xff1f;记得吗&…

浪潮之巅 OpenAI有可能是历史上第一个10万亿美元的公司

淘金时代很像 如果你那个时候去加州淘金&#xff0c;一大堆人会死掉&#xff0c;但是卖勺子的人、卖铲子的人永远可以赚钱。所谓的shove and pick business。 大模型是平台型机会。按照我们几天的判断&#xff0c;以模型为先的平台&#xff0c;将比以信息为先的平台体量更大。…

带你深入学习k8s--(四) 控制器(k8s核心)

目录 一、概念 1、什么是控制器 2、控制器执行流程 3、控制器类型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滚 3、修改滚动更新策略 4、暂停与恢复 3、daemonset 4、job 5、cronjob 前言&#xff1a; 上一章我们说到&#xff0c;pod有…

C++——入门基础知识

0.关注博主有更多知识 C知识合集 目录 1.命名空间 1.1命名空间的定义 1.2命名空间的使用 1.3命名空间定义的补充 2.输入与输出 3.缺省参数 3.1全缺省参数 3.2半缺省参数 3.3缺省参数的补充 4.函数重载 4.1C为什么支持函数重载&#xff1f; &#xff15;.引用 5.…

Wine运行器3.2.1——Windows虚拟机模块支持非X86架构

不写太多啥了&#xff0c;详细介绍看这里就行&#xff1a;https://bbs.deepin.org/post/248098 更新内容 ※1、Windows 虚拟机安装工具支持非 X86 架构&#xff1b; ※2、应用打包器可以与星火应用商店配合构建 arm/all 全架构的 Wine 包&#xff1b; ※3、Windows 虚拟机安装…

【MATLAB图像处理实用案例详解(12)】——基于纹理特征的指纹识别方法

目录 一、指纹图像预处理1.1 图像对比度增强1.2 图像二值化1.3 图像滤波 二、指纹图像特征提取 指纹识别系统主要涉及4个步骤&#xff1a;指纹图像采集、图像预处理、特征提取、特征匹配。一开始&#xff0c;通过指纹读取设备取得图像&#xff0c;并对原始图像进行初步处理&…