文章目录
- MySQL 主要线程
- 1. Master thread
- 2. io thread
- 3. purge thread
- 4. page Cleaner Thread
MySQL 主要线程
1. Master thread
Master thread有四大循环,分别是loop,background loop,suspend loop,flush loop。且四大循环的作用如下:
- loop: 是master thread的主循环, 用于将buffer pool的脏页刷新到磁盘,合并change buffer的脏页到辅助索引页面,清理undo log页。
- background loop: 这是master thread的后台循环。当数据库还在运行,且没有用户运行事件,此时会进入background 循环。
- flush loop: 刷新循环。一般是进入background loop后当服务器没有空闲状态了会进入flush loop.
- suspend loop: 暂停循环,数据库处于恢复的状态,状态恢复后进入loop循环.
如上图所示
innodb 1.0.x之前的master thread和此版本有些不同。不同之处在于脏页刷新的页面数,在1.0.x之前的版本中,每秒刷写固定的100个脏页,合并20个undo页。
2. io thread
在innodb 存储引擎中大量使用了AIO(Async IO)来处理io请求.在innodb 1.0.x版本之前,共有4个IO thread,分别是 wirte io ,read io,insert buffer ,log io thread
,但是在windows平台可以通过innodb_file_io_threads来增加IO thread。从InnoDB 1.0.X版本开始,read thread,write thread分别增加到了4个,并不再使用innodb_file_io_threads参数,而是使用innodb_read_io_threads,innodb_write_io_threads
参数。
3. purge thread
purge thread主要用于回收undo 页。在InnoDB 1.1版本之前主要由master thread回收undo 页,从innodb 1.1版本开始,将purge独立,从而提高cpu利用率。用户可以通过innodb_purge_threads
参数设置purge 的线程,不过这一特性是从innodb 1.2开始支持的,一般就设置4吧,表示有4个purge thread并行清理undo页面。
4. page Cleaner Thread
page Cleaner Thread 用于脏页刷新,这一功能是从innodb 1.2.x版本开始引入的。