innoDB存储引擎是多线程的模型,因此有多个后台线程来完成不同任务
1.Master Thread
innoDB核心后台线程,负责将缓存池中的数据异步刷新到磁盘,保证数据一致性。
2.IO Thread
在innoDB 中大量使用了AIO(Async IO 异步非阻塞IO)来处理IO请求,这可以极大提高数据库性能。
在innoBD1.0 之前共有四个IO Thread 。分别是 write ,read,insert buffer 和 log IO thread.在innoDB 1.0.x 版本开始,read thread 和 write thread 分别增大到了4个,在Linux环境下,IO Thread 的数量不可变。
mysql> SHOW VARLABLES LIKE 'innodb_version' ; //查看innoDB版本
mysql>SHOW VARLABLES LIKE 'innodb_%io_thread';//查看IO Thread 数量
可以通过SHOW ENGINE INNODB STATUS 来观察innoDB中的IO Thread
mysql>SHOW ENGINE INNODB STATUS; //查看IO Thread 数量
3.Purge Thread
事务被提交后,其所使用的undolog可能不太需要,因此 Purge Thread来回收已经使用并已经分配的undo页。在innoDB 1.1版本之前,pruge在Master Thread中完成。而从 innoDB 1.1开始,pruge操作可以独立到单独的线程中进行,以此来减轻Master的工作,从而提高CPU使用率以及提升存储引擎性能。
在 my.cnf 中添加如下命令来启用Purge Thread :
[mysql ]
innodb_purge_threads= 1
在innoDB 1.1 中即使 innodb_purge_threads 设置大于1,innoDB存储引擎启动时也会将其设置为1, 并在错误文件中留下记录。
在innoDB 1.2版本开始innoDB支持多个Pruge Thread,这样做的目的是进一步加快undo 页的回收,同时多个Pruge Thread离散的读取undo页,这样也能更进一步的利用磁盘随即读取性能。
4.Page Cleaner Thread
Page Cleaner Thread 是在innoDB 1.2.X版本中引入的。其作用是将以前版本的脏页的刷新操作都放入独立的线程。这样可以分担Master Thread 的工作压力,降低用户请求的阻塞时间,同时进一步提高innoDB的性能。