一 簡介:今天來聊聊具體的線程和IO
二 具體線程與作用
1 master thread mysql的主要工作觸發線程
1 redo and binlog日志
2 合並插入緩沖。
3 臟頁的刷新
4 undo頁回收
5 產生一個ckp點
2 IO THREAD 處理AIO模式的回調部分
具體說明 AIO模式, 就是后台處理邏輯,然后先返回狀態給前台,等后台處理完成,會調用回調函數進行二次操作,也就是數據庫做完異步刷新,再調用以下進程
insert buffer thread->insert buffer merges插入緩沖線程 1個
log thread -> asynchronous log flushes 日志線程 1個
read thread -> read-ahead負責數據塊的讀取) 讀線程 4個
write thread -> flushing of dirty buffers(負責數據庫的寫入) 寫線程 4個
3 purge thread 最新版本默認4個
1 undo段的回收 2 對delete標記數據進行清除
1 可以通過 innodb_purge_thread 調節參數 加快對undo段的回收 默認是1,OLTP業務通常調節為4
4 page clean thread
1 臟頁清理線程
1 默認啟用一個線程,5,7支持多線程刷臟
2 默認參數 innodb_page_cleaners 默認是1;最大可以是64,也就是會有64個page cleaner線程
3 判斷參數本身是否合適
Innodb_buffer_pool_wait_free 等待值
如果值很大,則需要增加innodb_page_cleaners值,同時增加寫線程(innodb_write_io_thread)
三 名詞解析
1 IO操作三要素 read / write/ sync
2 同步IO 在同步文件IO中,線程啟動一個IO操作然后就立即進入等待狀態,直到IO操作完成后才醒來繼續執行 例如redo的刷新,負責線程 master thread
異步IO 異步文件IO方式中,線程發送一個IO請求到內核,然后繼續處理其他的事情,內核完成IO請求后,將會通知線程IO操作完成了。 如果IO請求需要大量時間執行的話,異步文件IO方式可以顯著提高效率 (縮寫 aio) 例如臟頁的刷新,負責線程 io thread
請記住
1 master thread和 io thread是獨立的,並非相互干涉
2 mysql利用AIO的方式大大提高了處理效率,也是真正工作的,這里要牢記
3 page_cleaner_thread 和 purge thread的出現目標是減輕mater thread的負擔
四 總結
1 mater thread負責主要工作,purge thread 和page cleaner分別負責undo和臟頁的相關工作,整體的后期處理由io_thread完成
從分類角度上看 有部分同步IO工作 有部分異步IO工作
2 在起先的版本中 mysql通過源代碼模擬AIO的工作,在最新的版本中.mysql已經依賴linux內核進行AIO操作,參數是innodb_use_native_aio(默認開啟) 編譯需要依賴 libaio。AIO的相關線程就是io thread部分,上面第二部分