学习了一段MySQL之后,感觉到很多东西不深入理解存储引擎无法更好的进行数据库的设计和使用,所以记录下所学的东西,方便自己和他人。
InnoDB的存储引擎的架构体系如下图所示(图片来自MySQL技术内幕):
从图中我们可以清楚的看到InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责一下的工作:
1.维护所有进程/线程需要访问的多个内部数据结构;
2.缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存;
3.重做日志(redo log)缓存。
后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,此外将已修改的数据文件刷新到磁盘文件中,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。
1.后台线程:
Master Thread:Master Thread是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓存(INSERT BUFFER)UNDO页的回收等。
IO Thread:由于InnoDB存储引擎中大量使用了AIO来处理写IO请求,所以该线程的主要工作时负责这些IO请求的回调处理。一共有四种IO Thread,分别是write thread、read thread、insert buffer thread和log thread,我们可以再数据库中运行一下命令来查看具体的配置: