InnoDB 引擎 底层逻辑

目录

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可重复读 工作流程图

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT来了不用慌,广告人还有这个神器在手

#ChatGPT能取代广告人吗,#ChatGPT会抢走你的工作吗?#ChatGPT火了,会让营销人失业吗?自ChatGPT爆火以来,各种专业or非专业文章不停给广告人强加焦虑,但工具出现的意义,更多在于提效而非替代&…

【技术分享】防止根据IP查域名,防止源站IP泄露

有的人设置了禁止 IP 访问网站,但是别人用 https://ip 的形式,会跳到你服务器所绑定的一个域名网站上 直接通过 https://IP, 访问网站,会出现“您的连接不是私密连接”,然后点高级,会出现“继续前往 IP”,…

简单分享微信小程序上的招聘链接怎么做

招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…

【五一创作】【Simulink】采用延时补偿的三相并网逆变器FCS-MPC

👉 【Simulink】基于FCS-MPC的三相并网逆变器控制 上一篇博客介绍了FCS-MPC的基本操作,并且以三相并网逆变器为控制对象进行了Simulink仿真。 但实际仿真中没有考虑补偿延时。本篇博客将讨论为什么要考虑延时并进行补偿,最后对此仿真验证。 …

【Java数据结构】顺序表、队列、栈、链表、哈希表

顺序表 定义 存放数据使用数组但是可以编写一些额外的操作来强化为线性表&#xff0c;底层依然采用顺序存储实现的线性表&#xff0c;称为顺序表 代码实现 创建类型 先定义一个新的类型 public class ArrayList<E> {int capacity 10; //顺序表的最大容量int size …

【Java笔试强训 6】

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

基于微信小程序的垃圾分类系统的研究与实现(附源码和教程)

1. 简介 本文介绍的事基于微信小程序的垃圾分类系统&#xff0c;主要实现的功能有登录、注册、垃圾分类查询、垃圾预约回收、垃圾分类功能。 2.系统设计与实现 本章节是论文的重点&#xff0c;基于上一章介绍的总体设计框架的搭建&#xff0c;详细对小程序的页面布局、流程设…

Photoshop如何使用选区之实例演示?

文章目录 0.引言1.利用快速选择工具抠图2.制作网店产品优惠券3.利用选区改变眼睛颜色4.抠取复杂的花束5.制作丁达尔光照效果6.利用选区调整图像局部颜色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及…

MySQL基础

目标&#xff1a; 掌握MySQL的安装&#xff0c;登录&#xff0c;基础操作 掌握DDL语句 掌握DML语句 掌握DQL语句 1、数据库相关概念 以前我们做系统&#xff0c;数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果&#xff0c;当然文件存储…

Mysql为json字段创建索引的两种方式

目录 一、前言二、通过虚拟列添加索引&#xff08;Secondary Indexes and Generated Columns&#xff09;三、多值索引&#xff08;Using multi-valued Indexes&#xff09;四、官网地址 一、前言 JSON 数据类型是在mysql5.7版本后新增的&#xff0c;同 TEXT&#xff0c;BLOB …

【社区图书馆】二、LED子系统——硬件驱动层

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录 1、gpio_led_probe分析1.1 相关数据结构1.1.1 gpio_led_platform_data1.1.2 gpio_leds_priv 1.2 实…

【论文代码阅读】LORA: LOW-RANK ADAPTATION OF LARGE LAN- GUAGE MODELS

最近很多工作好像都绕不开lora&#xff0c;无论是sd还是llm.... 1. 背景 问题&#xff1a;大模型重新训练所有模型参数的完全微调变得不太可行。lora在做什么 我们提出了低秩自适应&#xff0c;即LoRA&#xff0c;它冻结预先训练的模型权重&#xff0c;并将可训练的秩分解矩…

【Redis—哨兵机制】

概念 当进行主从复制时&#xff0c;如果主节点挂掉了&#xff0c;那么没有主节点来服务客户端的写操作请求了&#xff0c;也没有主节点给从节点进行数据同步了。此时需要进行主从切换&#xff08;主从节点故障转移&#xff09;&#xff0c;Redis在 2.8 版本以后提供的哨兵&…

C++标准库 --- 动态内存 (Primer C++ 第五版 · 阅读笔记)

C标准库 --动态内存 (Primer C 第五版 阅读笔记&#xff09; 第12章 动态内存------(持续更新)12.1、动态内存与智能指针12.1.1、shared_ptr类12.1.2、直接管理内存12.1.3、shared_ptr和new结合使用12.1.4、智能指针和异常12.1.5、unique_ptr12.1.6、weak_ptr 12.2、动态数组1…

抓马,互联网惊现AI鬼城:上万个AI发帖聊天,互相嗨聊,人类被禁言

近日又有一个社区迷惑走红 上万个AI发帖聊天&#xff0c;人类不得入内&#xff1f; 据红星新闻报道 近日&#xff0c;一个名为Chirper的AI网络社区突然爆火 上万个AI聊天机器人在其中 激烈地聊天、互动、分享 社区主页右上角明确写着&#xff1a; “这是一个人工智能的社交…

【五一创作】( 字符串) 409. 最长回文串 ——【Leetcode每日一题】

❓ 409. 最长回文串 难度&#xff1a;简单 给定一个包含大写字母和小写字母的字符串 s &#xff0c;返回 通过这些字母构造成的 最长的回文串 。 在构造过程中&#xff0c;请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s “abccccdd”…

蒙蒂霍尔悖论

贝叶斯与频率主义对蒙蒂霍尔问题的解 在定义概率时&#xff0c;通常有两种思想流派&#xff1a;贝叶斯主义和频率主义。前者将概率视为我们对事件发生的信念程度&#xff0c;而后者则将其视为事件发生的相对频率。这篇文章介绍了使用贝叶斯和频率主义方法来解决著名的蒙蒂霍尔问…

IDEA Java 第一个mybatis入门程序

文章目录 准备mysql 开始新建maven项目maven添加引用mybatis配置文件工具类创建实例类添加mappermappermapper.xml 测试类 发现问题org.apache.ibatis.binding.BindingException: Type interface com.cpyy.mapper.UserMapper is not known to the MapperRegistry.The error may…

chatGPT国内可用镜像源地址

chatGPT国内可用镜像源地址 彷丶徨丶 关注 IP属地: 湖北 0.811 2023.03.15 16:02:16 字数 1,152 阅读 249,582 如果你正在尝试访问Chatgpt网站&#xff0c;但由于某些原因无法访问该网站&#xff0c;那么你可以尝试使用Chatgpt的国内镜像网站。以下是一些Chatgpt国内镜像网站的…

【MYSQL】数据类型和约束

目录 数据类型 1.数值类型 1.1.位--类型bit(M) 1.2. 整数类型--tinyint&#xff0c;smallint&#xff0c;int&#xff0c;bigint 1.3.小数类型--float、decimal 2.字符类型--char、varchar 3.日期类型--datetime、timestamp 4.string类型--enum和set mysql的约束 1.空…