存储引擎与架构

|---------|-------------------------------|
| 层级 | 说明 |
| 表空间 | 最高层,对应 ibd 文件,含记录和索引 |
| 段 | 数据段(叶子节点)、索引段(非叶子节点)、回滚段 |
| 区 | 1MB = 64 个连续页(默认页 16KB),保证连续性 |
| 页 | 磁盘管理最小单元,默认 16KB |
| 行 | 数据按行存放,含隐藏字段 |


5. InnoDB 内存架构

5.1 Buffer Pool(缓冲池)

缓存磁盘数据的核心内存区域。增删改查先操作缓冲池,按特定频率刷盘。

Page 三种状态:

  • free page:空闲
  • clean page:已使用,未修改
  • dirty page(脏页):已修改,未刷盘

LRU 优化 :链表分 Young 区(5/8)和 Old 区(3/8)。新数据先放 Old 区头部,停留超过 innodb_old_blocks_time 才能进 Young 区,防止全表扫描污染热点数据。

5.2 Change Buffer(插入缓冲)

针对二级索引的更新缓存。DML 时数据不在 Buffer Pool,变更先存 Change Buffer,后续读取时合并。减少随机 I/O。

5.3 Adaptive Hash Index(自适应哈希索引)

系统自动为热点索引页 构建 Hash 索引,加速等值查询,无需人工干预。参数:adaptive_hash_index。

5.4 Log Buffer(日志缓冲区)

保存待写入磁盘的 redo log,默认 16MB。

|----------------------------------|-------------------------------------|
| 参数 | 说明 |
| innodb_log_buffer_size | 日志缓冲区大小 |
| innodb_flush_log_at_trx_commit | 0=每秒刷、1=每次提交刷(默认)、2=每次提交写 OS 缓存+每秒刷 |


6. InnoDB 磁盘架构

|--------------------------------|-------------------------------------------|
| 结构 | 说明 |
| 系统表空间 | Change Buffer 存储区 |
| File-Per-Table | 默认每表独立 ibd 文件(innodb_file_per_table=ON) |
| 通用表空间 | CREATE TABLESPACE 创建 |
| Undo 表空间 | 初始两个,各 16MB,存 undo log |
| 临时表空间 | 会话级和全局级 |
| 双写缓冲区 (Doublewrite Buffer) | 刷盘前先写,防止部分写导致数据页损坏 |
| Redo Log | 事务持久性的保证 |


7. 后台线程

|-------------------------|--------------------------------------------------------|
| 线程 | 职责 |
| Master Thread | 核心线程:异步刷脏页、合并 Change Buffer、回收 undo 页 |
| IO Thread | 处理 AIO(异步 IO)回调(read/write/insert buffer/log IO 各 4 个) |
| Purge Thread | 回收已提交事务的 undo log(MVCC 不再需要时) |
| Page Cleaner Thread | 协助刷脏页,减轻 Master 压力 |


8. InnoDB 三大特性

  1. 插入缓冲(Change Buffer):减少随机 I/O
  1. 两次写(Doublewrite):防止部分写失败导致数据损坏
  1. 自适应哈希索引(AHI):自动优化热点查询
相关推荐
微订校园外卖系统2 小时前
校园外卖多站点管理能做吗?三层权限与对账架构
架构·外卖系统·本地生活·微订
金銀銅鐵2 小时前
为什么枚举类中可以定义抽象方法
java·后端·ai编程
得帆低代码PaaS3 小时前
企业级 Agent 架构:MCP、Integration、数据与治理能力
大数据·人工智能·架构·ai agent·企业数字化·mcp
xiaoye-duck4 小时前
《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
文丑颜不良啊4 小时前
LeetCode1941~1960题目解析
java·leetcode
txxzjmzlh4 小时前
SpringBoot 统⼀功能处理
java·spring boot·后端
孟健6 小时前
实测 agent-desktop:AI 控制桌面不截图、不占鼠标键盘,连点 55 次计算器 0 失误
人工智能·架构·开源
nice_lcj5206 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河666 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
你三大爷7 小时前
Netty / Kafka / Redis 保序问题的源码对比与 NIO 框架主流解法
后端·架构