mysql 檢視 髒頁 MySQL 刷髒頁

2021-10-17 13:07:22 字數 1022 閱讀 9524

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...