mysql-5.7 innodb_buffer_pool刷新機制詳解


一、innodb的臟頁刷新機制說明

  1、當innodb中的臟頁比例超過innodb_max_dirty_pages_pct_lwm的值時,這個時候innodb就會開始刷新臟頁到磁盤。

  2、當innodb中的臟頁比例超過innodb_max_dirty_pages_pct_lwm的值,而且還超過innodb_max_dirty_pages_pct

       innodb就會進入勤快刷新模式(agressively flush)這個模式下innodb會把臟頁更快的刷新到磁盤。

  3、還有一種情況叫做sharp checkpoint ,當innodb要重用它之前的redo文件時,就會把innodb_buffer_pool中所有與這

       個文件有關的頁面都要刷新到磁盤;這樣做就有可能引起磁盤的IO風暴了,輕者影響性能,重者影響可用性。

 

二、對上面機制的再次說明:

  1、臟頁刷新是innodb后台執行的確定性工作,默認情況下每秒都會有(check point);innodb的臟頁刷新就有點像現實生

      活中的呼吸一樣,通常是以固定的頻率進行的,一.1 就好比是安靜的情況下,一.2就好比是運動的情況下,一.3就好比

          你在水中閉氣一分中后剛探出頭一樣。

 

三、對於控制刷新機制的各個參數的說明:

  1、innodb_max_dirty_pages_pct默認值為75,也就是說當臟頁比例超過75%時才會進入勤快刷新模式。

  2、innodb_max_dirty_pages_pct_lwm默認值是0,0對於innodb_max_dirty_pages_pct_lwm來說是一個特殊值,它表示

      不啟用這個功能;由於沒有啟用這個功能,也就是說innodb_buffer_pool中的臟頁比例會操持在75%左右。

 

四、一.3的情況MySQL如何解決:

  1、對於第三種情況MySQL的解決思路是這樣的,IO風暴是由redo 文件重用時要刷新整個redo文件對應的innodb_buffer_pool頁面,

  也就是說風暴發生的時刻是重用redo日志是發生的;針對這一問題Mysql的解決方案是根據redo的生成速率,實時的刷新

  innodb_buffer_pool中的頁面到磁盤,這樣在redo日志文件重用時就不要刷新過多的頁面,也就沒有IO風暴了。由於頁面的刷新

  是根據redo的生成速率自動調整的,所以這個方案的名字叫innodb_adaptive_flushing

  2、由於innodb_adaptive_flushing 會自動的刷新,它基本上把一.1中的情況也給解決了,所以默認情況下mysql會把

  innodb_max_dirty_pages_pct_lwm=0,0在這里是一個特殊值,在這里表示關閉的意思。

 

----

學習交流

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM