Innodb_adaptive_flush_lwm:自适應flush機制的低水位。
innodb_max_dirty_page_pct_lwm:髒頁的低水位,用來控制buffer pool髒頁比率。
innodb_flushing_avg_loops:n次循環後,重新計算平均重新整理的dirty page和LSN。
要重新整理多少page和lsn主要代碼在af_get_pct_for_dirty,af_get_pct_for_lsn中
主要控制adaptive flush的代碼位于buf0flu.cc的af_get_pct_for_lsn中:
2.是否配置了adaptive flush或者age超過了異步重新整理的閥值。
3.lsn_age_factor=age占異步重新整理閥值的比例。
4.要被重新整理的比率=innodb_io_capacity_max/innodb_io_capacity*lsn_age_factor* sqrt(innodb_io_capacity)/7.5
<a></a>
和要重新整理多少髒頁有關的函數是af_get_pct_for_dirty:
1.如果有髒頁,并且innodb_max_dirty_pages_pct=0立馬重新整理。
2.如果沒有設定innodb_max_dirty_pages_pct_lwm,并且髒頁比率超過innodb_max_dirty_pages_pct,立馬重新整理。
3.設定了innodb_max_dirty_pages_pct_lwm并且髒頁比率比低水位大,af_get_pct_for_dirty =髒頁比率/(innodb_max_dirty_pages_pct+1)
要重新整理的page=PCT_IO(max(af_get_pct_for_dirty,af_get_pct_for_lsn))+avg_page(由innodb_flushing_avg_loops到期計算得到)。
要重新整理到的LSN= oldest_lsn+((這次要重新整理的page/上次已經重新整理的page)+1)*avg_lsn(由innodb_flushing_avg_loops到期計算得到)
幫助文檔還提到innodb_flushing_avg_loops越大,也意味着adaptive flush越慢,但是從代碼看,innodb_flushing_avg_loops會影響所有的flush不單單是adaptive。當寫入變大,innodb_flushing_avg_loops不變或者變大,是有可能導緻flush跟不上。
本文轉自 Fanr_Zh 部落格園部落格,原文連結:http://www.cnblogs.com/Amaranthus/p/4450840.html,如需轉載請自行聯系原作者