深入InnoDB引擎之Master Thread

2021-09-17 23:30:27 字數 2110 閱讀 4648

引擎的核心工作之一是由master_thread負責,master_thread具有最高的執行緒優先順序,有三大版本的master_thread,分別是:

每個版本的master_thread實現都各有不同,不變的是master_thread在innodb引擎中的地位。

master_thread的內部是由多個loop構成,分別是:

master_thread會根據伺服器的執行狀態在各個loop之間進行動態切換,對這幾個loop進行分析。

loop也稱為主迴圈,大多數的操作都是在這個loop中執行,其中兩個重要部分是1s操作與10s操作:

1、1s操作

其中合併插入緩衝的條件必須是前一秒發生的io次數低於閾值(5);而重新整理100個髒頁也是需要達到乙個髒頁閾值,最大髒頁百分比,可以通過show variables like 'innodb_max_dir%'檢視。

2、10s操作

其中,只有重新整理100個髒頁到磁碟這個操作是可能執行的,其它都是必然執行;刪除undo頁的操作即是full purge(完整清除)其中的插入緩衝,會根據過去十秒的io次數是否小於200決定是否重新整理100個髒頁到磁碟。

1、執行條件

根據上面分析的,master_thread的內部就是在多個loop之間跳轉,那麼,跳轉到該loop的條件如下:

2、執行操作

這個迴圈稱為後台迴圈,執行的主要是清除工作與合併插入緩衝。如果,資料庫在這個時候處於空轉,就會跳轉向flush loop,而如果這個資料處於活躍狀態,就會跳進主loop。

1、執行條件

由backgroup loop跳轉過來,可以跳轉過去suspend loop

2、執行操作

顧名思義,就是在滿足達到髒頁閾值的時候執行100個髒頁的沖刷工作,可以多次執行該操作;執行完畢後跳轉進suspend loop。

在執行完沖刷loop之後,結束通話執行緒,等待喚醒,喚醒之後會跳轉到主loop。

畫出流程圖如下:

附上**概圖:

//這是1.0.x版本之前的master_thread

void

master_thread()

if(buf_get_modified_ratio_pct > innodb_max_dirty_page_pct)

if(no_user_activity)

}//這裡省略10s操作的**。};

backgrouploop:

else};

flushloop:;if

(buf_get_modified_ratio_pct > innodb_max_dirty_page_pct)

else

suspendloop:

;}

1.0.x版本的master_thread做了如下幾個修改:

:通過新增innodb_adaptive_flushing引數,且新增了對應的處理函式:buf_flush_get_desired_flush_rate.

這個方法通過判斷產生redo log的rate速度來決定重新整理的髒頁的數量,並進行重新整理。

作出這兩點修改之後,引擎的效能提高了不少,刷髒能力也提高了,哪怕在髒頁沒有達到最大值,也會進行刷髒。

1.2.x的最大改變在於分離出刷髒工作,由page_cleaner執行刷髒工作,則減輕了master_thread的負載。

//以下是大致的偽**

if innodb is idle

srv_master_do_idle_tasks

(void);

else

srv_master_do_active_tasks

(void

);

原本的master_thread負責的工作中有大部分就是刷髒工作,分離出之後自然輕鬆很多了。

當下的innodb引擎已經將負責刷髒工作的 page_cleaner提公升為多執行緒的模式,即擁有多個cleaner,乙個如果讀者對刷髒工作感興趣,可以在我的blog中檢視《多執行緒刷髒》

深入理解Mysql之InnoDb

innodb將資料劃分為若干個頁,以頁作為磁碟和記憶體之間互動的基本單位,innodb中頁的大小一般為 16kb。也就是在一般情況下,一次最少從磁碟中讀取16kb的內容到記憶體中,一次最少把記憶體中的16kb內容重新整理到磁碟中。乙個資料行中分為記錄的額外資訊和記錄的真實資料兩部分 記錄的額外資訊 ...

InnoDB 儲存引擎

innodb是事務型資料庫的首選引擎,支援事務安全表 acid 支援行鎖定和外來鍵。mysql 5.5.5 之後,innodb作為預設儲存引擎。innodb的主要特性有一下幾項。a.innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事務安全 acid相容 儲存引擎。innodb鎖定在行級並...

InnoDB 儲存引擎

設計上採用了類似於oracle資料庫的架構 接下來 詳細介紹 innodb 儲存引擎的 體系架構 及其不同於其他儲存引擎的特性 一 概述 innodb 儲存引擎 是第乙個完整支援acid事物的 mysql 儲存引擎 特點 1 行鎖設計 2 支援mvcc 3 提供一致性非鎖定讀 4 最有效地利用 以及...