内容简介
《MySQL内核:InnoDB存储引擎 卷1》由MySQL专家,机工图书作者亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量实践,希望通过《MySQL内核:InnoDB存储引擎 卷1》帮助用户真正了解一个数据库存储引擎的开发。
《MySQL内核:InnoDB存储引擎 卷1》可以成为带领读者进入数据库存储引擎的内核开发,帮助那些从事MySQL数据库的相关行业从业人员。同时,《MySQL内核:InnoDB存储引擎 卷1》也适合对于研究生阶段有志于数据库内核开发的同学。
目录
第1章概览
1.1InnoDB存储引擎历史
1.2源码版本
1.3源码风格
1.3.1源码结构
1.3.2代码风格
1.4代码编译
1.5阅读源码次序
1.6思考题
1.7继续阅读
第2章基本数据结构与算法
2.1相关文件
2.2内存管理系统
2.2.1内存管理
2.2.2通用内存池
2.3哈希表
2.3.1哈希算法
2.3.2数据结构
2.4双链表
2.4.1内存双链表
2.4.2磁盘双链表
2.5其他数据结构和算法
2.5.1动态数组
2.5.2排序
2.6小结
2.7思考题
2.8继续阅读
第3章同步机制
3.1相关文件
3.2基础知识
3.2.1memorymodel
3.2.2mutualexclution
3.2.3AtomicRead-Modify-WriteOperation
3.2.4spinlock
3.2.5死锁
3.3InnoDB同步机制
3.3.1mutex
3.3.2rw-lock
3.3.3waitarray
3.3.4死锁检测
3.4小结
3.5思考题
3.6继续阅读
第4章重做日志
4.1相关文件
4.2相关概念
4.2.1简介
4.2.2物理逻辑日志
4.2.3LSN
4.2.4检查点
4.2.5归档日志
4.2.6恢复
4.3物理存储结构
4.3.1重做日志物理架构
4.3.2重做日志块
4.3.3重做日志组与文件
4.4相关数据结构
4.4.1log_group_struct
4.4.2log_struct
4.5组提交
4.6恢复
4.6.1数据结构
4.6.2重做日志恢复
4.7总结
4.8思考题
4.9继续阅读
第5章mini-transaction
5.1相关文件
5.2mini-transaction介绍
5.2.1基本概念
5.2.2TheFIXRules
5.2.3Write-AheadLog(WAL)
5.2.4Force-log-at-commit
5.3具体实现
5.3.1数据结构
5.3.2物理逻辑日志的实现
5.3.3mini-transaction的使用
5.4示例
5.5小结
5.6思考题
5.7继续阅读
第6章存储管理
6.1相关文件
6.2物理存储
6.2.1页
6.2.2区
6.2.3段
6.2.4表空间
6.3数据结构
6.3.1概述
6.3.2fil_system_struct
6.3.3fil_space_struct
6.3.4fil_node_struct
6.4异步I/O
6.4.1异步I/O数据结构
6.4.2异步I/O线程
6.5总结
6.6思考题
6.7继续阅读
第7章记录
7.1相关文件
7.2概述
7.3物理记录
7.3.1物理记录格式
7.3.2大记录格式
7.3.3伪记录
7.4逻辑记录
7.5记录之间的比较
7.6行记录版本
7.7小结
7.8思考题
7.9继续阅读
第8章索引页
8.1相关文件
8.2页
8.3存储结构
8.3.1PageHeader
8.3.2PageDirectory
8.3.3示例
8.4PageCursor
8.4.1定位记录
8.4.2插入记录
8.4.3删除记录
8.4.4并发控制
8.5小结
8.6思考题
8.7继续阅读
第9章锁
9.1相关文件
9.2锁与事务
9.2.1隔离性
9.2.2事务的隔离级别
9.2.3幻读
9.3InnoDB存储引擎中锁的类型与算法
9.4锁的内部实现
9.4.1数据结构
9.4.2锁的并发控制
9.4.3锁的类型与模式
9.4.4锁的兼容性
9.5显式锁和隐式锁
9.5.1显式锁与隐式锁的区别
9.5.2聚集索引记录的隐式锁
9.5.3辅助索引记录的隐式锁
9.6加锁操作
9.6.1加锁流程
9.6.2加锁过程
9.7行锁的维护
9.7.1插入
9.7.2更新
9.7.3PURGE
9.7.4一致性的锁定读
9.7.5页的分裂
9.7.6页的合并
9.8自增锁
9.9死锁
9.9.1死锁的概念
9.9.2死锁概率
9.9.3死锁的示例
9.10小结
9.11思考题
9.12继续阅读
第10章B+树索引
10.1B+树
10.1.1概述
10.1.2插入
10.1.3删除
10.2B+树索引
10.2.1索引的特点
10.2.2聚集索引
10.2.3辅助索引
10.2.4填充因子
10.3Inno
摘要与插图
前言为什么要写这本书
过去这些年,我一直在和各种不同的数据库打交道,见证了MySQL从一个小型的关系型数据库发展成为各大互联网企业的核心数据库系统的过程。期间我参与了一些大大小小的项目开发工作,成功地帮助开发人员构建了一些可靠的、健壮的应用程序。在这个过程中积累了一些经验,正是这些不断累积的经验赋予了我灵感,于是有了本书。这本书实际上反映了这些年来我做了哪些事情,汇集了很多同行每天可能都会遇到的一些问题,并给出解决方案。
本书是MySQL内核系列的第一本书,与之前出版的MySQL技术内幕不同的是,该系列的书将更靠近数据库内核层面,揭示MySQL数据库内核是如何运行的。MySQL内核系列的第一本书将从InnoDB存储引擎的内核来展开。
毫无疑问,InnoDB存储引擎已经成为MySQL数据库的“标准配置”。Facebook、Twitter、Yahoo、百度、淘宝、腾讯、网易这些互联网公司都将InnoDB作为后台的存储引擎。在时间的长河以及线上高并发验证下,其已经被证明是高性能、高可扩展性的引擎。身处数据库这个圈子,可以明显地感觉到从2010年开始,各大互联网公司已经不再满足于仅仅使用InnoDB存储引擎,他们开始越来越接触到引擎的内核层面,对引擎进行内核级别的优化以及根据公司的业务需求进行二次开发。即使是DBA本身也开始慢慢地不满足现状开始研究起InnoDB存储引擎的内核,似乎一夜之间不了解点内核实现都不好意思和别人说
你是搞MySQL数据库的。当然,我们需要感谢MySQL数据库,感谢MySQL数据库的创始人和InnoDB存储引擎的创始人。正是他们开源了这些代码,使得我们这些后人可以站在巨人的肩膀上继续学习与进步。在这方面,MySQL/InnoDB比其他数据库都要伟大,更值得我们尊敬。不可否认的是,国内对于数据库内核的开发学习资料与课程都有限。本科阶段几乎没有相关课程,仅特定数据库研究方向的研究生才会去关注这些技术,并且这些人才在国内稀少。很多想要踏进数据库内核领域的人在都会感到迷茫和无助。另外,有些人凭着自己的聪明与天赋看似掌握了内核的实现,但是从他们的博客描述来看,其离真正的理解还是有一些距离的,或者说他们仅刚入门。所以我们才会在网上看到不断有人在翻阅过代码后,或者简单设置了几个断点和调试后抱怨InnoDB存储引擎的设计是多么烂。数据库的世界并不如他们想象的那样简单与粗糙,数据库有着自己的理论体系。虽然数据库的实现有很多种,但大多需要遵循一些理论规范,如FixRules、Write-AheadLog、Force-log-at-commit、Lock等。
我从2006年就开始进行数据库的内核开发,现在想来还只能称为hack。我在内核开发的路上走了很多弯路,经过高人的指点以及自己不断的学习与探索,终于有了一些经验,现通过本书来完整地展示给读者。希望通过MySQL内核系列,使正在通往或已经在数据库内核开发道路的人员少走弯路。
出于这个目的,我联合了网易MySQL技术组的各位同事,完成了InnoDB存储引擎卷1的书籍撰写工作。其中第1、3、4、5、7、8、9、10、11章由我个人独立完成,第2和第14章由我和温正湖共同完成、第6和第12章由我和饶陇辉共同完成、第13和第15章由我和蒋鸿翔共同完成。在每章的,我还给出了思考题以及继续阅读的参考资料,通过这部分的内容,读者可以
加深对于每个知识模块的理解,并继续对某一模块进行深入研究。
本书面向的读者群:
数据库管理员
数据库架构设计师
数据库内核开发人员
其他对数据库内核感兴趣的开发人员
如何阅读本书
本书一共有15章,每章都像一本“迷你书”,可以单独成册。用户