mysql後臺執行緒詳解

sqysl發表於2020-01-24

1.mysql後臺執行緒

mysql後臺執行緒主要用於維持伺服器的正常執行和完成使用者提交的任務,主要包括:master thread,read thread,write thread,redo log thread,change buffer thread,page cleaner thread,purge thread,checkpoint,error monitor thread,lock monitor thread等.

2.mysql後臺執行緒詳解
1)master thread
Master thread優先順序最高, 其內部包含幾個迴圈:主迴圈(loop),後臺迴圈(background loop),重新整理迴圈(flush loop),暫停迴圈(suspend loop).master thread會根據其內部執行的相關狀態在前述各迴圈間中進行切換.
大部分操作在主迴圈(loop)中完成,其包含有1s和10s兩種操作.
1s操作主要包括:日誌緩衝重新整理到磁碟(總是,即使事務還沒有提交);最多刷100個新髒頁到磁碟(可能);執行和並改變緩衝的操作(可能);若當前沒有使用者活動,可能切換到background loop等.
10s操作主要包括:重新整理100個髒頁到磁碟(可能);合併至多5個改變緩衝(總是);日誌緩衝重新整理到磁碟(總是);刪除無用的undo頁(總是);重新整理100個或者10個髒頁到磁碟(總是)產生一個檢查點(總是)等.

2)read thread
read thread為mysql的讀執行緒,預設為4個,其負責將資料頁從磁碟上讀入,其由innodb_read_io_threads選項控制.使用者執行緒發起讀請求並將其放至讀請求佇列,read threads從讀請求佇列獲取讀任務並完成.

3)write thread
write thread為mysql的寫執行緒,預設為4個,其負責將資料頁從緩衝區寫出到磁碟,其由innodb_write_io_threads控制選項控制.page_cleaner執行緒發起寫請求並將其放至寫請求佇列,write threads從寫請求佇列獲取寫任務並完成.

4)redo log thread
redo log thread負責把日誌緩衝中的內容重新整理到redo log檔案中.

5)change buffer thread
change buffer thread負責把改變緩衝(change buffer)中的內容重新整理到磁碟.

6)page cleaner thread
page cleaner thread是負責髒頁重新整理的執行緒,從MySQL5.7起可增加多個.

7)purge thread
purge thread負責刪除無用的undo頁.由於進行DML語句的操作都會生成undo,系統需要定期對undo頁進行清理,這是需要purge操作,同時,其還對已經標記為刪除但還未清理的無用clustered和secondary索引資料進行清除.mysql5.6開始,把purge thread專門從master thread中分離出來,其由innodb_purge_thread選項進行控制.預設為1個,最大可以調整為32個.

8)checkpoint thread
checkpoint thread負責在redo log發生切換時,執行checkpoint.

9)error monitor thread
error monitor thread負責mysql報錯的監控.

10)lock monitor thread
lock monitor thread負責mysql鎖的監控.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2674294/,如需轉載,請註明出處,否則將追究法律責任。

相關文章