mysql-innodb存储引擎体系结构介绍


本文简单介绍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存储引擎》。

后续会继续分享相关基础和进阶知识,欢迎一起讨论交流~


文章作者: Xudong Jiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xudong Jiang !
 上一篇
mysql_innodb存储引擎关键特性 mysql_innodb存储引擎关键特性
本文将简单介绍mysql innodb存储引擎的关键特性;以帮助大家对innodb以及数据库底层的特效有大致的了解并学习其中的设计,方便后续做更深的学习和问题分析; 下面参考《mysql技术内幕 InnoDB存储引擎》,分享innodb
2017-05-23
下一篇 
java基础学习之string专题 java基础学习之string专题
今天介绍下java中的String 用法 定义String变量String a = "test"; new 创建String b = new String("test"); 可以直接使用+ +=
2017-03-23
  目录