本文简单介绍Innodb存储引擎的体系架构。
Innodb体系内含(参考图):
- 文件系统;
- 多个内存块组成的大的内存池;
- 后台线程
文件系统
数据存储再磁盘上的最终场所;
后台线程
Innodb是多线程的模型,后台有多个不同的后台线程。
- Master Thread: 核心后台线程,负责将缓冲池中的数据异步刷新到磁盘,保持数据一致性,包括脏页的刷新、合并插入缓冲、UNDO页的回收等;
- IO Thread:Innodb使用AIO来处理IO请求。负责处理io请求的回调;
- Purge Thread:回收已经使用 分配的undo页;
- Page Cleaner Thread: 1.2.x版本引入,将脏页的刷新操作放入单独的线程中完成;减轻Master Thread的工作;
内存
- 缓冲池:Innodb存储引擎虽然是基于磁盘存储,但使用缓冲池来提升性能;缓存查询结果;对于修改操作,先修改缓冲池中的页再异步刷新到磁盘上(checkpoint机制);
- Innodb缓冲池的管理:使用LRU list,Free List和Flush List;主要可以了解下LRU-最近最少使用算法管理;
新数据放在list midpoint的位置;- 重做日志缓冲:先放到缓冲区,按一定频率刷新到重做日志文件;
- 额外的内存池:对内存的管理通过内存堆的方式进行,对一些数据结构本身的内存分配需从额外的内存池中申请;
- checkpoint:前面提到checkpoint,其实就是一种类似定期执行的检查,把一些事情不是无限堆积而是定期执行。checkpoint的目的如下:
- 从checkpoint恢复数据库,缩短故障恢复时间;
- 缓冲池不够时将脏页刷新到磁盘;
- 重做日志不够时,刷新磁盘;
关于Innodb体系的细节以及更多的特性,以及mysql使用中更多的技巧和经验,后续文档会继续更新。
若感兴趣推荐阅读《Mysql技术内幕 InnoDB存储引擎》。
后续会继续分享相关基础和进阶知识,欢迎一起讨论交流~