MySQL刷髒頁優化方案彙總

2021-10-01 11:45:04 字數 893 閱讀 1204

目錄

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 freelist

3. lru和flu刷髒分離(percona)

4. 參考鏈結

多個page cleaner執行緒,每個bufferpool乙個 page cleaner執行緒

當某個執行緒對buffer pool中的page進行操作時,例如需要從lru中移除page時,如果當前的page被設定為hp,就要將hp更新為當前page的前乙個page。當完成當前page的flush操作後,直接使用hp中儲存的page指標進行下一輪flush。

在5.6版本中針對flush list的掃瞄做了一定的修復,使用乙個指標來記錄當前正在flush的page,待flush操作完成後,再看一下這個指標有沒有被別的執行緒修改掉,如果被修改了,就回溯到鍊錶尾部,否則無需回溯。但這個修復並不完整,在最差的情況下,時間複雜度依舊不理想。

根據buffer pool例項的髒頁分布來決定刷髒

lru刷髒是為了把部分page放到free_list。

之前方案在遇到髒頁刷髒後,還要重新遍歷才能把page放到free list。消耗遍歷成本。

5.7 優化成在buf_page_io_complete中進行判斷。如果是lru刷髒,嘗試把page放到free list中。

lru是為了搞空閒頁

flu是為了刷髒

將兩者分離,更好的適應不同的業務需求

mysql 檢視 髒頁 MySQL 刷髒頁

1.髒頁,乾淨頁 當記憶體資料頁和磁碟資料頁上的內容不一致時,我們稱這個記憶體頁為髒頁 記憶體資料寫入磁碟後,記憶體頁上的資料和磁碟頁上的資料就一致了,我們稱這個記憶體頁為乾淨頁。2.刷髒頁的時機 2.1 redo log redo log 是迴圈寫的,當redo log 寫滿了,即 write p...

MySQL 刷髒頁問題

mysql的刷髒頁問題 平時的工作中,不知道你有沒有遇到過這樣的場景,一條 sql 語句,正常執行的時候特別快,但是有時也不知道怎麼回事,它就會變得特別慢,並且這樣的場景很難復現,它不只隨機,而且持續時間還很短。當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體資料寫入到...

Mysql的刷髒頁問題

平時的工作中,不知道你有沒有遇到過這樣的場景,一條 sql 語句,正常執行的時候特別快,但是有時也不知道怎麼回事,它就會變得特別慢,並且這樣的場景很難復現,它不只隨機,而且持續時間還很短。當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體資料寫入到磁碟後,記憶體和磁碟上的...