mysql master thread

这个是一个公司的面试题,这个题目说的是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会一直处于挂起状态。

             


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章