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會一直處於掛起狀態。

             


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