MySQL--- InnoDB 存储引擎

一、逻辑存储结构

InnoDB逻辑存储结构图

逻辑存储单元(由大到小):表空间、段、区、页、行

二、架构

MySQL 5.5 开始,默认使用 InnoDB 存储引擎,它擅长事务处理并具有崩溃恢复的特性。

2.1 架构图

下面是 InnoDB 架构图,左侧为内存结构,右侧为磁盘结构
InnoDB 架构图

2.2 内存结构

MySQL 5.x 版本是 插入缓冲区(Insert Buffer)。在 MySQL 8.0 版本之后,引入 更改缓冲区(Change Buffer)

2.2.1 Buffer Pool(缓冲池)

缓冲池是主内存中的一个区域,缓存磁盘上经常操作的真实数据。在执行增删改查时,先操作缓冲池数据(若缓冲池没有,则从磁盘加载并缓存入缓冲池),然后再以一定频率刷新到磁盘中,从而减少磁盘I/O,加快处理速度

缓冲池以 Page页 为单位,底层采用链表数据结构管理 Page


根据状态将 Page 分为三种类型:

  • free page:空闲页,未被使用
  • clean page:被使用的页,数据没有被修改过
  • dirty page:脏页,被使用的页,数据被修改过,页中数据与磁盘数据不一致

2.2.2 Change Buffer(更改缓冲区)

更改缓冲区:针对于非唯一二级索引页,在执行 DML 语句时,如果这些 数据Page 没有在 Buffer Pool 中,不会直接操作磁盘,而是会将数据变更存在 Change Buffer 中,在未来数据被读取时,再将数据合并恢复到 Buffer Pool 中,再将合并后的数据刷新到磁盘中

Change Buffer 意义
非唯一二级索引结构图

与聚集索引不同,二级索引通常是非唯一的,且以相对随机的顺序插入二级索引。当删除和更新时会影响索引树中不相邻的二级索引页,如果每一次都操作磁盘,会产生大量的磁盘I/O。有了 Change Buffer 后,我们可以在 Buffer Pool 中进行合并处理,减少磁盘I/O

2.2.3 Adaptive Hash Index(自适应 Hash 索引)

自适应 Hash 索引:用于优化对 Buffer Pool 数据的查询。InnoDB 存储引擎会对表上各索引页的查询进行监控,当观察到 hash 索引可以提升速度时,则会建立 Hash 索引

自适应 Hash 索引无需人工干预,由系统根据情况自动完成

参数:adaptive_hash_index

## 查询是否开启 hash
show variables like '%hash_index%';

2.2.4 Log Buffer(日志缓冲区)

日志缓冲区:保存要写入磁盘中的 log 日志数据(redo log、undo log)。会定期刷到磁盘中

默认大小:16MB

如果需要更新、插入、删除 许多行事务,增大 Log Buffer 大小可以节省磁盘 I/O

-- 参数
innodb_log_buffer_size:缓冲区大小
innodb_flush_log_at_trx_commit:日志刷新到磁盘时机
	1:日志在每次事务提交时写入并刷新到磁盘
	0:每秒将日志写入并刷新到磁盘一次
	2:日志在每次事务提交后写入,并每秒刷新到磁盘一次

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

-- 查询日志缓冲区刷新到磁盘的时机
show variables like '%flush_log%';

</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值