咱們簡單交流下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 |