学习了一段MySQL之后,感觉到很多东西不深入理解存储引擎无法更好的进行数据库的设计和使用,所以记录下所学的东西,方便自己和他人。

InnoDB的存储引擎的架构体系如下图所示(图片来自MySQL技术内幕):InnoDB体系架构 后台线程

从图中我们可以清楚的看到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,我们可以再数据库中运行一下命令来查看具体的配置:

InnoDB体系架构 后台线程

结果如下图所示:

InnoDB体系架构 后台线程

     Purge Thread:事务被提交后,其所使用的undolog可能不再需要,因此使用PurgeThread来回收已经使用并分配的undo页

我们可以通过一下命令来查看该线程的信息:

InnoDB体系架构 后台线程

   Page Cleaner Thread:该线程的作用是将之前版本中的脏页的刷新操作都放入到该单独的线程中来完成,其目的是为了减轻Master Thread的工作及对于用户查询线程的阻碍。

 

 

相关文章: