InnoDBストレージエンジン(engine)メインスレッド(master thread)ワークフロー分析


本文は《MySQL技術内幕InnoDB記憶エンジン》の中のmaster threadソースコードの分析理解に基づいて、整理する.この本の作者が提供したmaster threadの偽コード:
 1 void master_thread(){  
 2     goto loop;  
 3 loop:  
 4 for(int i = 0; i<10; i++){  
 5     thread_sleep(1) // sleep 1 second  
 6     do log buffer flush to disk  
 7     if ( last_one_second_ios < 5 )  
 8         do merge at most 5 insert buffer  
 9     if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct )  
10         do buffer pool flush 100 dirty page  
11     if ( no user activity )  
12         goto backgroud loop  
13 }  
14 if ( last_ten_second_ios < 200 )  
15     do buffer pool flush 100 dirty page  
16 do merge at most 5 insert buffer  
17 do log buffer flush to disk  
18 do full purge  
19 if ( buf_get_modified_ratio_pct > 70% )  
20     do buffer pool flush 100 dirty page  
21 else  
22     buffer pool flush 10 dirty page  
23 do fuzzy checkpoint  
24 goto loop  
25 background loop:  
26 do full purge  
27 do merge 20 insert buffer  
28 if not idle:  
29 goto loop:  
30 else:  
31     goto flush loop  
32 flush loop:  
33 do buffer pool flush 100 dirty page  
34 if ( buf_get_modified_ratio_pct> innodb_max_dirty_pages_pct )  
35     goto flush loop  
36 goto suspend loop  
37 suspend loop:  
38 suspend_thread()  
39 waiting event  
40 goto loop;  

説明:
log buffer flush to disk REDOログキャッシュ(redo log)をログファイル(log file)にリフレッシュ
merge insert bufferは、InnoDBエンジン特有の非集計インデックスの挿入または更新を指し、インデックス・ページに直接挿入するのではなく、挿入された非集計インデックスがバッファ・プールにあるかどうかを判断します.ある場合は、直接挿入します.存在しない場合は、メインの挿入キャッシュ領域に配置してから、バッファと非集計インデックスページのサブノードのマージ操作を一定の頻度で挿入します.通常、複数の挿入が1つの操作にマージされます.
full purgeフルクリーンアップ操作とは、不要なUndoページを削除することです.テーブルに対してupdate、deleteのような操作を実行すると、元のローは削除とマークされますが、コンシステンシリード(consistent read)の関係で、これらのローバージョンの情報を保持する必要があります.しかし、full purgeプロセスでは、InnoDBストレージエンジンは、現在のトランザクションシステムで削除されたローが削除できるかどうかを判断します.たとえば、以前のバージョンのUndo情報を読み込むクエリー操作がある場合があります.できれば、InnoDBはすぐに削除します.注意full purgeは、使用されなくなったUndoページのみを消去します.
buffer pool flush dirty pageディスク上のデータブロックと比較して、バッファプールで変更したデータページ(変更したdata page、つまり汚れたページdirty page)をハードディスクにリフレッシュすることを指します.
fuzzy checkpointはファジイチェックポイントを生成し、windowsオペレーティングシステムのシステム復元ポイントに似ているチェックポイントは、最古のログシーケンス番号(LSN)のページをハードディスクに書きます.
innodb_max_dirty_pages_pct InnoDBストレージエンジンの動的変数で、バッファプール内の汚れたページの割合を指します.理論的にはより小さな値、より大きなIO.
InnoDB Pluginからshow engine innodb statusで現在のmaster threadのステータス情報を表示できます.