主要涉及2个函数:
cur_lsn = log_get_lsn();
oldest_lsn = buf_pool_get_oldest_modification();
age = cur_lsn > oldest_lsn ? cur_lsn - oldest_lsn : 0;
pct_for_dirty = af_get_pct_for_dirty();
pct_for_lsn = af_get_pct_for_lsn(age);
pct_total = ut_max(pct_for_dirty, pct_for_lsn);
//avg_page_rate等于上一个srv_flushing_avg_loops循环里刷磁盘的脏页数的平均值
//最大不会超过srv_max_io_capacity值
n_pages = (PCT_IO(pct_total) + avg_page_rate) / 2;
if (n_pages > srv_max_io_capacity) {
n_pages = srv_max_io_capacity;
}
n_pages = page_cleaner_do_flush_batch(
n_pages, oldest_lsn + lsn_avg_rate * (age_factor + 1));
af_get_pct_for_dirty:
//获取脏页百分比
buf_get_total_list_len(&lru_len, &free_len, &flush_list_len);
ratio = (100 * flush_list_len) / (1 +