這個是一個公司的面試題,這個題目說的是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會一直處於掛起狀態。