@@ -25,7 +25,7 @@ MySQL 的体系架构分为四层:
25
25
- ** 连接层** :管理客户端连接、认证与线程分配,支持 SSL 安全协议。
26
26
- ** 核心服务层** :处理 SQL 解析、优化、缓存及内置函数执行。
27
27
- ** 存储引擎层** :实际负责数据的存储和提取,支持多引擎扩展。
28
- - ** 数据存储层** :通过文件系统与存储引擎交互,管理物理文件
28
+ - ** 数据存储层** :通过文件系统与存储引擎交互,管理物理文件。
29
29
30
30
31
31
@@ -84,22 +84,63 @@ show table status from database where name="tablename"
84
84
| 数据文件 | .ibd | .ibd | 表数据与索引存储 |
85
85
| 临时文件 | ibtmp1 | ibtmp1 | 临时表空间 |
86
86
87
- > 示例:通过 ` SHOW CREATE TABLE ` 可查看SDI元数据,支持JSON格式导出
87
+ > 示例:通过 ` SHOW CREATE TABLE ` 可查看SDI元数据,支持 JSON 格式导出
88
88
89
89
90
90
91
- ### 2.3 Innodb引擎的4大特性
91
+ ### 2.3 Innodb 引擎的 4 大特性
92
92
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 实现快速恢复
97
138
98
139
99
140
100
141
### 2.4 数据的存储
101
142
102
- 在整个数据库体系结构中,我们可以使用不同的存储引擎来存储数据,而绝大多数存储引擎都以二进制的形式存储数据;我们来看下啊 InnoDB 中对数据是如何存储的。
143
+ 在整个数据库体系结构中,我们可以使用不同的存储引擎来存储数据,而绝大多数存储引擎都以二进制的形式存储数据;我们来看下InnoDB 中对数据是如何存储的。
103
144
104
145
在 InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位,在表空间的下面又包括段(segment)、区(extent)、页(page)
105
146
0 commit comments