InnoDB 引擎 底层逻辑

这篇具有很好参考价值的文章主要介绍了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 结构图

InnoDB 引擎 底层逻辑

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 架构逻辑图

InnoDB 引擎 底层逻辑

2.1.2 文件夹文件图

InnoDB 引擎 底层逻辑

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

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

InnoDB 引擎 底层逻辑

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

InnoDB 引擎 底层逻辑

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

InnoDB 引擎 底层逻辑

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 ;

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

InnoDB 引擎 底层逻辑

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

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

 2.5 查看 InnoDB 状态信息

show engine innodb status ;

InnoDB 引擎 底层逻辑

 文章来源地址https://www.toymoban.com/news/detail-431181.html

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 流程图 ->一致性 持久性

InnoDB 引擎 底层逻辑

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

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

3.3.2 详细介绍

InnoDB 引擎 底层逻辑

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 快照读

InnoDB 引擎 底层逻辑

4.3 MVVC 实现原理

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

InnoDB 引擎 底层逻辑 

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

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

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

InnoDB 引擎 底层逻辑

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

InnoDB 引擎 底层逻辑

 

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

InnoDB 引擎 底层逻辑

 

4.4.6 MVCC RC工作流程图

InnoDB 引擎 底层逻辑

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

InnoDB 引擎 底层逻辑

 

到了这里,关于InnoDB 引擎 底层逻辑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • innodb底层原理和MySQL日志机制

    客户端连接数据库需要输入账号、密码。连接器进行校验账号密码以及权限。 连接器连接以后,比如输入一个select语句,这时候第一步就会先根据sql语句作为key给查询缓存中查看这条sql有没有已经被查询过,如果有直接返回,如果没有就接着到分析器。查询缓存是以key-valu

    2024年01月24日
    浏览(32)
  • InnoDB底层的一些主要数据结构

    MySQL的InnoDB存储引擎使用了一些关键的底层数据结构来优化数据的存储、索引和查询。以下是InnoDB底层的一些主要数据结构: 1. **B+树索引**:    - InnoDB的主要数据结构是B+树(平衡树的一种变体),用于存储表数据和索引。    - 每个InnoDB表都有一个主键索引(如果没有显式

    2024年02月01日
    浏览(32)
  • Innodb底层原理与Mysql日志机制深入剖析

    大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器

    2024年02月21日
    浏览(29)
  • 【InnoDB 存储引擎】15.4 InnoDB Architecture

    下面的图显示了内存和磁盘结构组成InnoDB存储引擎架构 内存结构:Section 15.5, “InnoDB In-Memory Structures” Buffer Pool(缓冲池) Change Buffer(修改缓冲) Adaptive Hash Index(自适应哈希索引) Log Buffer(日志缓冲) 磁盘结构:Section 15.6, “InnoDB On-Disk Structures” Tables(表) Indexes(索引

    2024年02月12日
    浏览(45)
  • InnoDB存储引擎

    其实存储引擎也很简单,我认为就是一种存储解决方案,实现了新增数据、更新数据和建立索引等等功能。 有哪些已有的存储引擎可以让我们选择呢? InnoDB、MyISAM、Memory、CSV、Archive、Blackhole、Merge、Federated、Example 种类很多,但是常用的存储引擎目前就只有InnoDB和MyISAM,下面

    2024年02月08日
    浏览(26)
  • MySQL架构 & InnoDB存储引擎

    我们在开发的时候,我们都需要对业务数据进行存储,这个时候,你们就会用到MySQL 、O racal 等数据库。 MySQL它是一个关系型数据库, 这种关系型数据库就有Oracal 、 MySQL,以及最近很火的PgSQL 等。 那什么是关系型数据库呢? 就是它是 基于我们的SQL语句去执行操作的 。 其实

    2024年02月07日
    浏览(39)
  • SQL-Innodb引擎

                                               

    2024年02月14日
    浏览(24)
  • Mysql进阶- InnoDB引擎架构

    InnoDB的逻辑存储结构如下图所示:  1). 表空间 是InnoDB存储引擎逻辑结构的最高层, 如果用户启用了参数      innodb_file_per_table(在 8.0版本中默认开启) ,则每张表都会有一个表空间(xxx.ibd),一个mysql实例可以对应多个表空间, 用于存储记录、索引等数据 。 2).   段 ,分为

    2024年02月04日
    浏览(31)
  • InnoDB引擎之flush脏页

    利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,由此也带来了内存脏页的问题。   脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。   当内存数据页

    2023年04月10日
    浏览(42)
  • MySQL 的 InnoDB 存储引擎简介

    MySQL 是世界上最流行的开源关系型数据库管理系统之一,而其中的存储引擎则是其关键组成部分之一。InnoDB 存储引擎在 MySQL 中扮演了重要角色,提供了许多高级功能和性能优化,适用于各种应用程序和工作负载。本文将深入介绍 InnoDB 存储引擎的各个方面,以帮助您更好地理

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包