Skip to content

Commit 015b649

Browse files
committed
📖innodb
1 parent 735d9b3 commit 015b649

File tree

4 files changed

+301
-206
lines changed

4 files changed

+301
-206
lines changed

docs/data-management/MySQL/MySQL-Storage-Engines.md

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ MySQL 的体系架构分为四层:
2525
- **连接层**:管理客户端连接、认证与线程分配,支持 SSL 安全协议。
2626
- **核心服务层**:处理 SQL 解析、优化、缓存及内置函数执行。
2727
- **存储引擎层**:实际负责数据的存储和提取,支持多引擎扩展。
28-
- **数据存储层**:通过文件系统与存储引擎交互,管理物理文件
28+
- **数据存储层**:通过文件系统与存储引擎交互,管理物理文件
2929

3030

3131

@@ -84,22 +84,63 @@ show table status from database where name="tablename"
8484
| 数据文件 | .ibd | .ibd | 表数据与索引存储 |
8585
| 临时文件 | ibtmp1 | ibtmp1 | 临时表空间 |
8686

87-
> 示例:通过 `SHOW CREATE TABLE` 可查看SDI元数据,支持JSON格式导出
87+
> 示例:通过 `SHOW CREATE TABLE` 可查看SDI元数据,支持 JSON 格式导出
8888
8989

9090

91-
### 2.3 Innodb引擎的4大特性
91+
### 2.3 Innodb 引擎的 4 大特性
9292

93-
1. 插入缓冲 (Insert Buffer/Change Buffer)
94-
2. 双写机制(Double Write)
95-
3. 自适应哈希索引(Adaptive Hash Index,AHI)
96-
4. 预读 (Read Ahead)
93+
#### **1. 插入缓冲(Insert Buffer / Change Buffer)**
94+
95+
- **作用**:优化非唯一二级索引的插入、删除、更新(即 DML 操作)性能,减少磁盘随机 I/O 开销。
96+
- 原理:
97+
- 当非唯一索引页不在内存中时,操作会被暂存到 Change Buffer(内存区域)中,而非直接写入磁盘。
98+
- 后续通过合并(Merge)操作,将多个离散的修改批量写入磁盘,减少 I/O 次数。
99+
- 适用条件:
100+
- 仅针对非唯一二级索引。
101+
- 可通过参数 `innodb_change_buffer_max_size` 调整缓冲区大小(默认 25% 缓冲池)。
102+
103+
#### 2. 二次写(Double Write)
104+
105+
- 作用:防止因部分页写入(Partial Page Write)导致的数据页损坏,确保崩溃恢复的可靠性。
106+
- 流程:
107+
- 脏页刷盘时,先写入内存的 Doublewrite Buffer,再分两次(每次 1MB)顺序写入共享表空间的连续磁盘区域。
108+
- 若数据页写入过程中崩溃,恢复时从共享表空间副本还原损坏页,再通过 Redo Log 恢复。
109+
- 意义:牺牲少量顺序 I/O 换取数据完整性,避免因随机 I/O 中断导致数据丢失。
110+
111+
#### 3. 自适应哈希索引(Adaptive Hash Index, AHI)
112+
113+
- 作用:自动为高频访问的索引页创建哈希索引,加速查询速度(尤其等值查询)。
114+
115+
- 触发条件:
116+
117+
- 同一索引被连续访问 17 次以上。
118+
- 某页被访问超过 100 次,且访问模式一致(如固定 WHERE 条件)。
119+
120+
- 限制
121+
122+
:仅对热点数据生效,无法手动指定,可通过参数 `innodb_adaptive_hash_index` 启用或关闭。
123+
124+
#### 4. 预读(Read Ahead)
125+
126+
- 作用:基于空间局部性原理,异步预加载相邻数据页到缓冲池,减少未来查询的磁盘 I/O。
127+
- 模式:
128+
- 线性预读:按顺序访问的页超过阈值时,预加载下一批连续页(默认 64 页为一个块)。
129+
- 随机预读(已废弃):当某块中部分页在缓冲池时,预加载剩余页,但因性能问题被弃用。
130+
131+
#### 其他重要特性补充
132+
133+
尽管上述四点是核心性能优化特性,但 InnoDB 的其他关键能力也值得注意:
134+
135+
- 事务支持:通过 ACID 特性(原子性、一致性、隔离性、持久性)保障数据一致性。
136+
- 行级锁与外键约束:支持高并发与数据完整性。
137+
- **崩溃恢复**:结合 Redo Log 和 Double Write 实现快速恢复
97138

98139

99140

100141
### 2.4 数据的存储
101142

102-
在整个数据库体系结构中,我们可以使用不同的存储引擎来存储数据,而绝大多数存储引擎都以二进制的形式存储数据;我们来看下啊 InnoDB 中对数据是如何存储的。
143+
在整个数据库体系结构中,我们可以使用不同的存储引擎来存储数据,而绝大多数存储引擎都以二进制的形式存储数据;我们来看下InnoDB 中对数据是如何存储的。
103144

104145
在 InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位,在表空间的下面又包括段(segment)、区(extent)、页(page)
105146

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)