Innodb存储引擎-后台Thread
Mysql的内部结构
总览Mysql,真的是干了很多事情。而这些事情肯定是要有线程去做的,那为了提高CPU的利用率,多线程再所难免,Innodb也在一次次的更新中把多线程处理得更加完善。如今的多线程分为以下的情况
Master Thread
其实我甚至可以认为,最早的Innodb肯定是单线程的,那就是只有Master这个线程,它做了所有的事情,后面所有的其他线程只是为了给他分担压力。
Master负责的是:主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲(INSERT BUFFER)、UNDO页的回收等。后面也可以看到有线程给他分担了压力
IO Thread
因为Mysql的数据是存储在磁盘的,运行的时候大量的IO就是在所难免的,所以必须有一部分的线程去做这部分的IO。并且他们的处理都是AIO,AIO就意味着异步非阻塞,他们是同时进行的。CPU利用率极大!
IO分为以下四部分:
- insert buffer io 1
- log io 1
- innodb_read_io_threads 4
- innodb_write_io_threads 4
而在Innodb的版本迭代下,从最初的每种只有一个线程。发展到,read和write io有4个线程,并且可以支持修改。有个要注意的小点就是,read thread的id永远小于write thread
Purge Thread
在一次事务提交之后,undolog就已经没有用了,就需要把它给删除掉。在Innodb1.1版本之后它是用来替Master Thread做删除不要的undolog的。
注意:在Innodb1.1的时候innodb_purge_threads只允许设置为1个.一个以上都会报错,而在1.2版本以后就可以设置更多了,但是一般不推荐设置太多,太多反而占用资源,没有必要。
Page Cleaner Thread
简而言之,它是用来刷新脏页的,在缓冲区Cache中,当修改了以后他就变成了脏页,是需要被写回磁盘的。这个线程就是用来做这个的。