MySQL:Innodb page clean 執行緒 (一): 基礎篇
本文使用原始碼版本:Percona 5.7.14本文約定 -協調工作執行緒:因為page clean執行緒的協調執行緒也會完成部分重新整理工作,所以叫做協調工作執行緒。
一、page clean執行緒概念
Innodb中page clean執行緒將髒資料寫入到磁碟,髒資料寫盤後相應的redo就可以覆蓋,然後達到redo迴圈使用的目的。在5.7中引數可以開啟多個page clean執行緒服務於多個innodb buffer例項如下:
The innodb_page_cleaners default value was
changed from 1 to 4 in MySQL 5.7. If the number of page cleaner threads exceeds the number
of buffer pool instances, innodb_page_cleaners is automatically set to the same value as
innodb_buffer_pool_instances.
實際上在內部實現中如果page clean執行緒為4個那麼包含一個協調工作執行緒和三個工作執行緒,這個協調工作執行緒也要完成一部分工作。在MySQL中我們可以通過語句檢視到這些工作執行緒:
| 17 | 57982 | innodb/page_cleaner_thread | NULL | BACKGROUND | NULL | NULL |
| 18 | 57983 | innodb/page_cleaner_thread | NULL | BACKGROUND | NULL | NULL |
| 20 | 57985 | innodb/page_cleaner_thread | NULL | BACKGROUND | NULL | NULL |
| 19 | 57984 | innodb/page_cleaner_thread | NULL | BACKGROUND | NULL | NULL |
實際上在我淺析分析中發現,所有的工作執行緒都是不斷輪詢每一個和buffer instance對應的槽(slot),直到所有的buffer instance都已經進行了刷髒工作為止,並沒有固定那個工作執行緒服務於那個buffer instance例項。