如上显示的是6个io read thread和4个io write thread,但是关于log的io thread 和insert buffer thread的io thread 只有一个;从MySQL 5.6开始默认是四个io read thread和4个io write thread,并且可以通过innodb_read_io_threads 和innodb_write_io_threads 参数进行设置:
mysql> show variables like '%io_threads%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| innodb_read_io_threads | 6 |
| innodb_write_io_threads | 4 |
+-------------------------+-------+
2 rows in set (0.00 sec)
3)Purge Thread
事务被提交后,其所使用的undo log可能不再需要,因此需要PurgeThread来回收已经使用并分配的undo页。从InnoDB1.1版本开始,purge操作可以独立到单独的线程中进行,以此来减轻Master Thread的工作,从而提高CPU的使用率、提升存储引擎的性能。可以通过在MySQL数据库的配置文件中添加相关的命令来启用独立的Purge Thread,如下参数:
mysql> show variables like 'innodb_purge_threads';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_purge_threads | 1 |
+----------------------+-------+
1 row in set (0.00 sec)
Page Cleaner Thread
4)Page Cleaner Thread
是在InnoDB 1.2.x版本中引入的,其作用是将之前版本中的脏页的刷新操作都放入到单独的进程中来完成,目的就是为了减轻原Master Thread的工作及对于用户查询线程的阻塞,进一步提高InnoDB存储引擎的性能。
然后回答最开始的问题:
在内存中先写undo,然后写redo,至于redo和binlog顺序不确定, 刷盘是先刷undo,然后刷redo,最后刷新binlog;