第1章 概览 1
1.1 InnoDB存储引擎历史 1
1.2 源码版本 2
1.3 源码风格 3
1.3.1 源码结构 3
1.3.2 代码风格 4
1.4 代码编译 4
1.5 阅读源码次序 5
1.6 思考题 6
1.7 继续阅读 6
第2章 基本数据结构与算法 7
2.1 相关文件 7
2.2 内存管理系统 8
2.2.1 内存管理 8
2.2.2 通用内存池 11
2.3 哈希表 14
2.3.1 哈希算法 14
2.3.2 数据结构 16
2.4 双链表 17
2.4.1 内存双链表 18
2.4.2 磁盘双链表 19
2.5 其他数据结构和算法 20
2.5.1 动态数组 21
2.5.2 排序 21
2.6 小结 22
2.7 思考题 22
2.8 继续阅读 22
第3章 同步机制 23
3.1 相关文件 23
3.2 基础知识 23
3.2.1 memory model 24
3.2.2 mutual exclution 25
3.2.3 Atomic Read-Modify-Write Operation 26
3.2.4 spin lock 27
3.2.5 死锁 29
3.3 InnoDB同步机制 30
3.3.1 mutex 30
3.3.2 rw-lock 34
3.3.3 wait array 36
3.3.4 死锁检测 38
3.4 小结 39
3.5 思考题 39
3.6 继续阅读 40
第4章 重做日志 41
4.1 相关文件 41
4.2 相关概念 41
4.2.1 简介 41
4.2.2 物理逻辑日志 45
4.2.3 LSN 45
4.2.4 检查点 47
4.2.5 归档日志 48
4.2.6 恢复 49
4.3 物理存储结构 49
4.3.1 重做日志物理架构 49
4.3.2 重做日志块 51
4.3.3 重做日志组与文件 53
4.4 相关数据结构 55
4.4.1 log_group_struct 55
4.4.2 log struct 56
4.5 组提交 60
4.6 恢复 61
4.6.1 数据结构 61
4.6.2 重做日志恢复 62
4.7 总结 66
4.8 思考题 66
4.9 继续阅读 66
第5章 mini-transaction 67
5.1 相关文件 67
5.2 mini-transaction介绍 67
5.2.1 基本概念 67
5.2.2 The FIX Rules 68
5.2.3 Write-Ahead Log(WAL) 69
5.2.4 Force-log-at-commit 69
5.3 具体实现 70
5.3.1 数据结构 70
5.3.2 物理逻辑日志的实现 71
5.3.3 mini-transaction的使用 72
5.4 示例 73
5.5 小结 76
5.6 思考题 76
5.7 继续阅读 76
第6章 存储管理 77
6.1 相关文件 77
6.2 物理存储 77
6.2.1 页 78
6.2.2 区 79
6.2.3 段 82
6.2.4 表空间 84
6.3 数据结构 86
6.3.1 概述 86
6.3.2 fil_system_struct 86
6.3.3 fil_space_struct 87
6.3.4 fil_node_struct 88
6.4 异步I/O 91
6.4.1 异步I/O数据结构 91
6.4.2 异步I/O线程 94
6.5 总结 95
6.6 思考题 95
6.7 继续阅读 95
第7章 记录 97
7.1 相关文件 97
7.2 概述 98
7.3 物理记录 99
7.3.1 物理记录格式 99
7.3.2 大记录格式 103
7.3.3 伪记录 106
7.4 逻辑记录 107
7.5 记录之间的比较 108
7.6 行记录版本 111
7.7 小结 115
7.8 思考题 115
7.9 继续阅读 115
第8章 索引页 117
8.1 相关文件 117
8.2 页 117
8.3 存储结构 118
8.3.1 Page Header 118
8.3.2 Page Directory 121
8.3.3 示例 122
8.4 Page Cursor 125
8.4.1 定位记录 125
8.4.2 插入记录 127
8.4.3 删除记录 130
8.4.4 并发控制 130
8.5 小结 131
8.6 思考题 131
8.7 继续阅读 131
第9章 锁 133
9.1 相关文件 133
9.2 锁与事务 133
9.2.1 隔离性 133
9.2.2 事务的隔离级别 135
9.2.3 幻读 136
9.3 InnoDB存储引擎中锁的类型与算法 137
9.4 锁的内部实现 139
9.4.1 数据结构 139
9.4.2 锁的并发控制 143
9.4.3 锁的类型与模式 143
9.4.4 锁的兼容性 144
9.5 显式锁和隐式锁 145
9.5.1 显式锁与隐式锁的区别 145
9.5.2 聚集索引记录的隐式锁 146
9.5.3 辅助索引记录的隐式锁 146
9.6 加锁操作 152
9.6.1 加锁流程 152
9.6.2 加锁过程 154
9.7 行锁的维护 154
9.7.1 插入 154
9.7.2 更新 155
9.7.3 PURGE 156
9.7.4 一致性的锁定读 158
9.7.5 页的分裂 159
9.7.6 页的合并 162
9.8 自增锁 164
9.9 死锁 165
9.9.1 死锁的概念 165
9.9.2 死锁概率 167
9.9.3 死锁的示例 168
9.10 小结 170
9.11 思考题 171
9.12 继续阅读 171
第10章 B+树索引 173
10.1 B+树 173
10.1.1 概述 173
10.1.2 插入 176
10.1.3 删除 179
10.2 B+树索引 180
10.2.1 索引的特点 180
10.2.2 聚集索引 181
10.2.3 辅助索引 185
10.2.4 填充因子 190
10.3 InnoDB存储引擎B+树索引的实现 191
10.3.1 数据结构 191
10.3.2 相关latch 192
10.3.3 整理 192
10.3.4 分裂 192
10.3.5 合并 200
10.4 查找 201
10.4.1 mode 201
10.4.2 latch_mode 204
10.4.3 cursor 205
10.5 DML操作 207
10.5.1 插入 207
10.5.2 非主键更新 210
10.5.3 主键更新 215
10.5.4 删除 216
10.6 持久游标 219
10.7 自适应哈希索引 221
10.7.1 实现原理 221
10.7.2 创建哈希索引 225
10.7.3 哈希索引的维护 226
10.7.4 自适应哈希索引的优缺点 227
10.8 小结 227
10.9 思考题 228
10.10 继续阅读 228
第11章 Insert Buffer 229
11.1 相关文件 229
11.2 基本概念 229
11.3 架构实现 231
11.3.1 存储结构 231
11.3.2 逻辑控制 233
11.3.3 示例 234
11.4 相关数据结构 236
11.5 死锁 237
11.5.1 latch顺序 237
11.5.2 并发控制 239
11.5.3 异步I/O线程 240
11.6 维护 241
11.6.1 记录合并 241
11.6.2 空间收缩 242
11.7 小结 243
11.8 思考题 244
11.9 继续阅读 244
第12章 缓冲池 245
12.1 相关文件 245
12.2 概述 246
12.2.1 缓冲池 246
12.2.2 LRU、Free和Flush链表 249
12.2.3 基本数据结构 251
12.3 缓冲池的管理 255
12.3.1 LRU算法 255
12.3.2 LRU链表维护 255
12.3.3 页的分配 256
12.4 页的读取 257
12.4.1 物理读取 257
12.4.2 随机预读 258
12.4.3 线性预读 259
12.4.4 逻辑读取 262
12.5 页的刷新 264
12.5.1 检查点 264
12.5.2 部分写的问题 266
12.5.3 刷新的实现 267
12.6 小结 269
12.7 思考题 269
12.8 继续阅读 270
第13章 事务处理 271
13.1 相关文件 271
13.2 事务 272
13.2.1 概述 272
13.2.2 分类 274
13.2.1 隔离级别 275
13.3 事务系统结构 275
13.3.1 事务系统段 275
13.3.2 数据结构 277
13.4 doublewrite段 280
13.5 undo日志存储 281
13.5.1 简介 281
13.5.2 实现结构 283
13.5.3 回滚段 283
13.5.4 undo段 284
13.6 undo记录 288
13.6.1 存储结构 288
13.6.2 insert undo log record 290
13.6.3 update undo log record 292
13.7 purge 299
13.7.1 清理操作 299
13.7.2 实现原理 300
13.8 rollback 303
13.8.1 回滚指针 303
13.8.2 回滚操作 303
13.9 commit 306
13.10 kernel_mutex与并发控制 308
13.11 小结 309
13.12 思考题 309
13.13 继续阅读 309
第14章 数据字典 311
14.1 相关文件 311
14.2 数据字典概述 312
14.3 主要数据对象 312
14.3.1 数据字典系统 312
14.3.2 表定义 314
14.3.3 索引定义 316
14.3.4 外键约束定义 317
14.3.5 其他数据对象定义 319
14.4 InnoDB系统表对象 319
14.4.1 SYS_TABLES 319
14.4.2 SYS_COLUMNS 320
14.4.3 SYS_INDEXES 321
14.4.4 SYS_FIELDS 322
14.4.5 其他表对象 322
14.5 数据字典创建 323
14.5.1 数据字典段 324
14.5.2 数据字典物理结构 324
14.5.3 数据字典初始化 325
14.5.4 数据字典缓存组织 326
14.6 数据字典对象加载 327
14.6.1 用户表加载 327
14.6.2 用户索引和外键约束加载 328
14.7 小结 329
14.8 思考题 329
14.9 继续阅读 329
第15章 服务管理 331
15.1 相关文件 331
15.2 初始化InnoDB存储引擎 331
15.2.1 相关重要参数 333
15.2.2 服务管理相关数据结构 333
15.2.3 文件创建和加载 335
15.2.4 启动后台线程 337
15.3 关闭InnoDB存储引擎 337
15.3.1 数据持久化 338
15.3.2 资源释放 338
15.4 master线程 339
15.4.1 主要功能 339
15.4.2 数据刷盘策略 339
15.5 锁超时监控线程 341
15.6 思考题 342
15.7 继续阅读 342