一篇文章让你搞懂Mysql InnoDB内存结构

本文详细介绍了MySQL InnoDB存储引擎的内存结构,包括预读机制、插入缓存、二次写、自适应哈希索引和异步IO等特性。通过对InnoDB内存管理的理解,帮助读者掌握SQL执行逻辑,特别是数据页的读取、刷新和优化策略。
摘要由CSDN通过智能技术生成

前言

我们都熟悉mysql数据库服务架构,也清楚SQL的执行顺序,Mysql的数据在磁盘和内存中的存储结构是采用B+树的数据结构,但是在InnoDB引擎中,数据在内存和磁盘中的展示形式以及怎么和Mysql的服务架构建立联系,SQL查询和InnoDB引擎之前的联系,可能就不是不清楚了。

Mysql的逻辑架构图如下所示:

![](https://img-blog.csdnimg.cn/img_convert/036d56f718b4bfbfc91874dd48724c95.png

InnoDB存储引擎结构

InnoDB存储引擎的逻辑存储结构是什么呢,其实所有的数据都被逻辑地放在了一个空间中这个空间中的文件就是实际存在的物理文件,即表空间。默认情况下,一个数据库表占用一个表空间,表空间中存放该表对应的数据、索引、insert buffer bitmap undo信息、insert buffer 索引页、double write buffer 等是放在共享表空间中的。

# 默认一个数据库表单独占有一个表空间
show variables like '%innodb_file_per_table%'
innodb_file_per_table=ON
# 修改设置
SET GLOBAL innodb_file_per_table=OFF; 1.2.3.4.5.

2.1、InnoDB表存储引擎文件


​每个表空间由 段 segment 区 extent 页 page 组成。页是数据存储数据的基本单位,默认大小为 16kb。 区是由连续页组成的空间,默认大小为 1MB。多个区构成表的段。 InnoDB 逻辑存储结构

![](https://img-blog.csdnimg.cn/img_convert/d7c5173e457761be9d5703cae0da33d8.png
在我们执行sql时,不论是查询还是修改,myql 总会把数据从磁盘读取内内存中,而且在读取数据时,不会单独加在一条数据,而是直接加载数据所在的数据页到内存中,而读取的方式有两种,现行预读方式和随机预读方式,默认采用线性预读方式。

InnoDB 引擎架构

![](https://img-blog.csdnimg.cn/img_convert/afe95810daa17f8feead88f38fd4ed9a.png

2.2、InnoDB 预读机制

  • 线性预读和随机预读:

线性预读是以 extent 为单位,而随机预读是以 extent 中的page 为单位,线性预读着眼于将下一个extent 数据读取到 buffer pool 中,而随机预读是将当前extent中剩余的page读到 buffer pool 中。 如果一个extent 区中被顺序读取得page数量超过一定的数量( innodb_read_ahead_threshold),则直接加载 extent 中剩余的数据页。

2.3、InnoDB 特性

2.3.1、插入缓存

插入缓冲(Insert Buffer/Change Buffer)为了提升插入性能,insert buffer 是

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值