master thread原始碼分析-虛擬碼
阿新 • • 發佈:2019-02-03
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_one_second_ios < 5% innodb_io_capacity ) do merge 5% innodb_io_capacity insert buffer if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct ) do buffer pool flush 100% innodb_io_capacity dirty page else if enable adaptive flush do buffer pool flush desired amount dirty page if ( no user activity ) goto backgroud loop } if ( last_ten_second_ios < innodb_io_capacity) do buffer pool flush 100% innodb_io_capacity dirty page do merge at most 5% innodb_io_capacity insert buffer do log buffer flush to disk do full purge if ( buf_get_modified_ratio_pct > 70% ) do buffer pool flush 100% innodb_io_capacity dirty page else do buffer pool flush 10% innodb_io_capacity dirty page do fuzzy checkpoint goto loop background loop: do full purge do merge 100% innodb_io_capacity insert buffer if not idle: goto loop: else: goto flush loop flush loop: do buffer pool flush 100% innodb_io_capacity dirty page if ( buf_get_modified_ratio_pct> innodb_max_dirty_pages_pct ) go to flush loop goto suspend loop suspend loop: suspend_thread() waiting event goto loop; }