1. 髒頁,乾淨頁
當記憶體資料頁和磁碟資料頁上的內容不一致時,我們稱這個記憶體頁為髒頁;
記憶體資料寫入磁碟後,記憶體頁上的資料和磁碟頁上的資料就一致了,我們稱這個記憶體頁為乾淨頁。
2. 刷髒頁的時機
2.1 redo log
redo log 是迴圈寫的,當redo log 寫滿了,即 write pos 追上了 checkpoint 時,此時沒有空間記錄 redo log,就需要將 checkpoint 向前推進,推進的這部分日誌對應的髒頁就需要刷入磁碟。
此時所有的更新全部阻塞,此時寫效能跌為0,必須等待刷一部分髒頁後才能繼續更新,這種情況要盡量避免;
2.2 系統記憶體
當系統記憶體不足時,就需要將一部分資料頁淘汰掉,如果淘汰的是髒頁,就需要先將髒頁刷入磁碟。
當淘汰的髒頁過多時,會導致查詢的響應時間變長;
2.3 mysql認為空閒的時間
不存在效能問題;
2.4 mysql正常關閉之前,會把記憶體中所有的髒頁刷入磁碟
不存在效能問題;
3. 刷髒頁的控制策略
3.1 正確伺服器的io能力
innodb_io_capacity引數表示機器的磁碟能力,根據機器能力合理設定該引數的值;
3.2 刷髒頁的速度
innodb_max_dirty_pages_pct是髒頁比例上限,預設值為75%;
innodb根據當前的髒頁比例算出乙個值m1;
innodb每次寫入redo log 有乙個序號,根據當前序號和checkpoint之間的差值算出乙個值m2;
之後引擎取m1和m2之間(m1和m2都是0-100之間的數)的較大值除以100乘以innodb_io_capacity,這就是刷髒頁的速度;
3.3 刷髒頁機制
當乙個查詢請求執行過程中需要先flush乙個髒頁時,如果髒頁的旁邊也是髒頁,此時引擎會將相鄰的髒頁也刷掉,直到下乙個資料頁不是髒頁為止;
該機制通過引數 innodb_innodb_flush_neighbors 控制,值為0時表示只刷自己,值為1時則有連坐效果;
MySQL 刷髒頁問題
mysql的刷髒頁問題 平時的工作中,不知道你有沒有遇到過這樣的場景,一條 sql 語句,正常執行的時候特別快,但是有時也不知道怎麼回事,它就會變得特別慢,並且這樣的場景很難復現,它不只隨機,而且持續時間還很短。當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體資料寫入到...
Mysql的刷髒頁問題
平時的工作中,不知道你有沒有遇到過這樣的場景,一條 sql 語句,正常執行的時候特別快,但是有時也不知道怎麼回事,它就會變得特別慢,並且這樣的場景很難復現,它不只隨機,而且持續時間還很短。當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體資料寫入到磁碟後,記憶體和磁碟上的...
MySQL刷髒頁優化方案彙總
目錄 1.改善flu刷髒 1.1 增加併發 5.7.4 1.2 改善鍊錶遍歷方式 1.3 平衡刷髒權重 5.7.6 1.4 使用者執行緒在檢查redo 空間時不參與刷髒 5.7.6 1.5 為page cleaner執行緒設定更高的優先順序 5.7.6 2.改善lru刷髒 2.1 髒頁 to fre...