后台线程的作用就是:将InnoDB存储引擎的缓冲池中的数据在合适的时机刷新到磁盘文件中。
在InnoDB的后台线程中,分为4类,分别是:Master Thread 、IO Thread、Purge Thread、 Page Cleaner Thread。
1). Master Thread
核心后台线程,负责调度其他线程,还负责将缓冲池中的数据异步刷新到磁盘中, 保持数据的一致性,还包括脏页的刷新、合并插入缓存、undo页的回收 。
2). IO Thread
在InnoDB存储引擎中大量使用了AIO(Asynchronous Input/Output,异步非阻塞IO)来处理IO请求, 这样可以极大地提高数据库的性能,而IO Thread主要负责这些异步IO请求的回调。
主要有以下四类,一共10个线程:
线程类型 | 默认个数 | 职责 |
---|---|---|
Read thread | 4 | 负责读操作 |
Write thread | 4 | 负责写操作 |
Log thread | 1 | 负责将日志缓冲区刷新到磁盘 |
Insert buffer thread | 1 | 负责将写缓冲区内容刷新到磁盘 |
我们可以通过以下的这条指令,查看到InnoDB的状态信息,其中就包含IO Thread信息。
show engine innodb status \G;
包含事务的情况,也包含IO的情况,大家直接看IO这块信息就行了,此时就可以看到read tread有4个线程;write thread有4个线程,log thread1个线程,insert buffer thread1个线程。这里全部采用的是aio,即异步IO。
对于这些线程,目前大家来看,aio read:[0, 0, 0, 0]
所有的线程都是在等待接受请求;aio writes: [0, 0, 0, 0]
:所有的写线程也都是在等待接收请求。
3). Purge Thread
主要用于回收事务已经提交了的undo log(撤销日志),在事务提交之后,undo log可能不用了,就用它来回收。
4). Page Cleaner Thread
协助 Master Thread 刷新脏页到磁盘的线程,它可以减轻 Master Thread 的工作压力,减少阻塞。