MySQL InnoDB後臺線程threads詳解

master thread 
核心的後臺線程,主要負責將緩衝池中的數據異步刷新到磁盤,保證數據的一致性,包括髒頁的刷新、合併插入緩衝、undo頁的回收等。
Master thread在主循環中,分兩大部分操作,每秒鐘的操作和每10秒鐘的操作:
每秒一次的操作包括:
1、日誌緩衝刷新到磁盤,即使這個事務還沒有提交(總是),這點解釋了爲什麼再大的事務commit時都很快;
2、合併插入緩衝(可能),合併插入並不是每秒都發生,InnoDB會判斷當前一秒內發生的IO次數是否小於5,如果是,則系統認爲當前的IO壓力很小,可以執行合併插入緩衝的操作。
3、至多刷新100個InnoDB的緩衝池的髒頁到磁盤(可能),這個刷新100個髒頁也不是每秒都在做。
每10秒一次的操作包括:
1、刷新100個髒頁到磁盤(可能);
2、合併至多5個插入緩衝(總是);
3、將日誌緩衝刷新到磁盤(總是);
4、刪除無用的undo頁(總是);
5、產生一個檢查點(checkpoing);
IO thread 
主要負責IO請求的回掉處理。分別爲write、read、insert buffer和log IO thread。線程數量可以通過參數進行調整。5.6以後的版本可以通過innodb_write_io_threads和innodb_read_io_threads來限制讀寫線程,而在5.6版本以前,只有一個參數innodb_file_io_threads來控制讀寫總線程數。
purge thread 
負責回收已經使用並分配的undo頁,purge操作默認是由master thread中完成的,爲了減輕master thread的工作,提高cpu使用率以及提升存儲引擎的性能。用戶可以在參數文件中添加如下命令來啓動獨立的purge thread。
innodb_purge_threads=1
從innodb1.2版本開始,可以指定多個innodb_purge_threads來進一步加快和提高undo回收速度。
page cleaner thread
執行髒頁刷新操作。講髒頁刷盤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章