这个是一个公司的面试题,这个题目说的是mysql的这个主线程的后台的4个线程的名字和作用。
这个可以在《myql技术内幕 innodb详解》里面有说明。
下面是摘录
innodb 有一个主线程
4个I/O线程(innod新版本里面各有4个读写线程,可以用show engine innodb status查看。也可以看看)
1个master thread
1个锁监控线程
一个错误监控线程
master thread:
主循环--后台循环--刷新循环--暂停循环
主循环:每秒
日志缓冲刷新磁盘,即使这个事务没有提交(总是)
合并插入缓冲(可能)
刷新100个innodb缓冲池中的脏页到磁盘(可能)这个参数innodb_max_dirty_pages_pct=?来确定
如果没有用户活动,切换到background loop(可能)
每10秒
刷新100个脏页到磁盘(可能)
合并5个插入缓冲(总是)
将日志缓冲写入磁盘(总是)
删除无用undo日志(总是)
刷新100个或10个脏页到磁盘(总是)
产生一个检查点(总是)LSN
后台循环 ---如果前台没有活动用户(数据库暂时空闲)或数据库关闭,主循环就会切换为后台循环
删除无用undo(总是)
合并20个插入缓冲(总是)
跳会到住循环(总是)
不断刷新100个页,知道符合条件(可能跳转到flush loop)
*这个参数innodb_io_capacity的百分比来刷新相对来说的数量页
合并插入是参数的5%
缓冲区刷脏页,刷新参数的设置数
若flush loop中没有什么事情做了,innodb就会切换到suspent loop,将master loop 挂起,如果没有使用任何innodb的表,master thread会一直处于挂起状态。
转载于:https://blog.51cto.com/wdegang/1230640