當內存數據頁跟磁盤數據頁內容不一致的時候,我們稱這個內存頁為“臟頁”。內存數據寫入到磁盤后,內存和磁盤上的數據頁的內容就一致了,稱為“干凈頁”
回到文章開頭的問題,你不難想象,平時執(zhí)行很快的更新操作,其實就是在寫內存和日志,而 MySQL 偶爾“抖”一下的那個瞬間,可能就是在刷臟頁(flush)。
問題:一個內存配置為 128GB、innodb_io_capacity 設置為 20000 的大規(guī)格實例,正常會建議你將 redo log 設置成 4 個 1GB 的文件。但如果你在配置的時候不慎將 redo log 設置成了 1 個 100M 的文件,會發(fā)生什么情況呢?又為什么會出現這樣的情況呢?(如果一個高配的機器,redo log 設置太小,會發(fā)生什么情況。)
每次事務提交都要寫 redo log,如果設置太小,很快就會被寫滿,也就是下面這個圖的狀態(tài),這個“環(huán)”將很快被寫滿,write pos 一直追著 CP。
這時候系統不得不停止所有更新,去推進 checkpoint。
這時,你看到的現象就是:磁盤壓力很小,但是數據庫出現間歇性的性能下跌。