當(dāng)內(nèi)存數(shù)據(jù)頁跟磁盤數(shù)據(jù)頁內(nèi)容不一致的時(shí)候屠升,我們稱這個(gè)內(nèi)存頁為“臟頁”潮改。內(nèi)存數(shù)據(jù)寫入到磁盤后,內(nèi)存和磁盤上的數(shù)據(jù)頁的內(nèi)容就一致了腹暖,稱為“干凈頁”
回到文章開頭的問題汇在,你不難想象,平時(shí)執(zhí)行很快的更新操作脏答,其實(shí)就是在寫內(nèi)存和日志糕殉,而 MySQL 偶爾“抖”一下的那個(gè)瞬間,可能就是在刷臟頁(flush)殖告。
問題:一個(gè)內(nèi)存配置為 128GB阿蝶、innodb_io_capacity 設(shè)置為 20000 的大規(guī)格實(shí)例,正常會(huì)建議你將 redo log 設(shè)置成 4 個(gè) 1GB 的文件黄绩。但如果你在配置的時(shí)候不慎將 redo log 設(shè)置成了 1 個(gè) 100M 的文件羡洁,會(huì)發(fā)生什么情況呢?又為什么會(huì)出現(xiàn)這樣的情況呢爽丹?(如果一個(gè)高配的機(jī)器筑煮,redo log 設(shè)置太小,會(huì)發(fā)生什么情況粤蝎。)
每次事務(wù)提交都要寫 redo log真仲,如果設(shè)置太小,很快就會(huì)被寫滿初澎,也就是下面這個(gè)圖的狀態(tài)秸应,這個(gè)“環(huán)”將很快被寫滿,write pos 一直追著 CP谤狡。
這時(shí)候系統(tǒng)不得不停止所有更新灸眼,去推進(jìn) checkpoint。
這時(shí)墓懂,你看到的現(xiàn)象就是:磁盤壓力很小焰宣,但是數(shù)據(jù)庫出現(xiàn)間歇性的性能下跌。
感謝極客時(shí)間:https://time.geekbang.org/column/article/71806