innodb master執行緒的工作機制

myownstars發表於2013-04-07

由幾個loop組成:

Loop

Background loop

Flush loop

Suspend loop

 

Loop

分為兩大部分:per-secondper-10-second

Per-second

重新整理日誌緩衝--

合併插入緩衝如果前1秒的IO次數小於5innodb會認為當前IO壓力小,就會執行此操作

重新整理100個髒頁如果當前髒頁比例超過innodb_max_dirty_pages_pct,則重新整理髒頁

如果當前沒有active操作,則切換到background loop

 

--相應虛擬碼

For  ( I = 0; I < 10; i++) {

  Thread_sleep(1);

  Do log flush to disk;

  If ( last_one_second_ios < 5)

      Do merge insert buffer

  If ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct )

     Flush dirty page innodb_io_capacity

 If ( no user actitivity)

     Goto background loop

}

 

注:當系統負載較大時,可能每次迴圈間隙小於1秒,由InnoDB自動調整

Show engine innodb status相應輸出片斷

-------------------

BACKGROUND THREAD

-------------------

Srv_master_thread loops: 45 1_second, 45 sleeps, 4 10_second, 6 background, 6 flush  --系統空閒時候

 

Srv_master_thread loops: 2188 1_second, 1537 sleeps, 218 10_second, 2 background, 2 flush  --繁忙,並非每次1_secondsleep 1

 

 

Per-10second

重新整理100個髒頁如果過去10IO操作小於200次,則重新整理髒頁

合併至多5個插入緩衝

重新整理重做日誌緩衝

刪除無用的undo執行full purge,判斷標誌為deleted的行是否可以清除

重新整理10010個髒頁如果buf_get_modified_ratio_pct > 70% 重新整理100個髒頁,否則重新整理10個髒頁

生成checkpoint—將最老的LSN頁寫入磁碟

 

--相應虛擬碼

If ( last_10_second_ios < 200 )

   Flush dirty page innodb_io_capacity

Do merge insert buffer

Flush log buffer

Do full purge

 

Background loop

若當前沒有使用者活動,或關閉資料庫時執行,依次執行如下操作:

刪除無用的undo

合併20個插入緩衝

如果有active活動,跳回loop;否則重新整理100個髒頁,如果buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct,則跳轉至flush loop

 

Flush loop

每次重新整理100個頁,直到符合條件為止(buf_get_modified_ratio_pct < innodb_max_dirty_pages_pct)

如果flush loop無事可做,則跳轉至suspend_loop

 

Suspend loop

mater thread掛起,等待被觸發

 

 

上述每次重新整理100個髒頁或執行Ninsert buffer全是hard codinginnodb plugin提供了patch,可透過引數控制這一數字

Innodb_io_capacity:一次重新整理的髒頁數量,預設200;而每次合併插入緩衝的數量=innodb_io_capacity * 5%

Innodb_adaptive_flushing:透過buf_flush_get_desired_flush_rate判斷需要重新整理髒頁的數量,透過判斷redo log生成速度決定可重新整理髒頁的數量,即使比例< innodb_max_dirty_pages_pct,也可能重新整理髒頁;

 

 

以上資訊來源於

MySQL技術內幕 –InnoDB儲存引擎》

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-757902/,如需轉載,請註明出處,否則將追究法律責任。

相關文章