InnoDB master thread工做原理 InnoDB master thread學習

      咱們簡單交流下InnoDB master thread學習,有興趣的朋友能夠參考<<MySQL技術內蒙--InnoDB存儲引擎第二版>>html

void master_thread(){
    goto loop;
loop:
for (int i=0;i<10;i++){
    thread_sleep(1) //sleep 1 second-->每秒執行操做(負載在狀況下會延遲)
    do log buffer flush to disk  //重作日誌緩衝刷新到磁盤,即便這個事務沒有提交(老是)
    if ( last_ten_second_ios < 5% innodb_io_capacity) //若是當前的10次數小於(5% * 200=10)(innodb_io_capacity默認值是200)
        do merger 5% innodb_io_capacity insert buffer //執行10個合併插入緩衝的操做(5% * 200=10)
    if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct ) //若是緩衝池中的髒頁比例大於innodb_max_dirty_pages_pct(默認是75時)
        do buffer pool plush 100% innodb_io_capacity dirty page //刷新200個髒頁到磁盤
    else if enable adaptive flush  //若是開戶了自適應刷新
        do buffer pool flush desired amount dirty page //經過判斷產生redo log的速度決定最合適的刷新髒頁的數量
    if ( no user activity ) //若是當前沒有用戶活動
        goto backgroud loop  //跳到後臺循環
}

//每10秒執行的操做
if ( last_ten_second_ios < innodb_io_capacity)  //若是過去10內磁盤IO次數小於設置的innodb_io_capacity的值(默認是200)
    do buffer pool flush 100% innodb_io_capacity dirty page //刷新髒頁的數量爲innodb_io_capacity的值(默認是200)
do merger 5% innodb_io_capacity insert buffer  //合併插入緩衝是innodb_io_capacity的5%(10)(老是)
do log buffer flush to disk                    //重作日誌緩衝刷新到磁盤,即便這個事務沒有提交(老是)
do full purge       //刪除無用的undo頁 (老是)
if (buf_get_modified_ratio_pct > 70%)          //若是緩衝池中的勝頁比例大於70%
    do buffer pool flush 100% innodb_io_capacity dirty page  //刷新200個髒頁到磁盤
else
    do buffer pool flush 10% innodb_io_capacity dirty page   //不然刷新20個髒頁到磁盤
goto loop
backgroud loop:   //後臺循環
do full purge     //刪除無用的undo頁 (老是)
do merger 5% innodb_io_capacity insert buffer  //合併插入緩衝是innodb_io_capacity的5%(10)(老是)
if not idle:      //若是不空閒,就跳回主循環,若是空閒就跳入flush loop
goto loop:    //跳到主循環
else:
    goto flush loop
flush loop:  //刷新循環
do buf_get_modified_ratio_pct pool flush 100% innodb_io_capacity dirty page //刷新200個髒頁到磁盤
if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct ) //若是緩衝池中的髒頁比例大於innodb_max_dirty_pages_pct的值(默認75%)
    goto flush loop            //跳到刷新循環,不斷刷新髒頁,直到符合條件
    goto suspend loop          //完成刷新髒頁的任務後,跳入suspend loop
suspend loop:
suspend_thread()               //master線程掛起,等待事件發生
waiting event
goto loop;
}

MySQL 5.6 InnoDB 存儲引擎結構圖: mysql

 

總結:MySQL5.6中InooDB存儲引擎不管是性能和功能都比以前版本改善了很多,因此建議你們使用,至關不錯的一個版本^.^ios

 

想了解更多於InnoDB相關內容,能夠參考《MySQL技術內幕  InnoDB存儲引擎》 做者姜 承堯 的博客:http://insidemysql.sinaapp.com/article/4.html/innodbsql

 

 

做者:陸炫志app

出處:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111ide

您的支持是對博主最大的鼓勵,感謝您的認真閱讀。本文版權歸做者全部,歡迎轉載,但請保留該聲明。oop

相關文章
相關標籤/搜索