分为3个阶段
第一阶段:while循环中调用rseg_history_len= srv_do_purge(srv_n_purge_threads, &n_total_purged);
while退出循环的条件
1)srv_purge_should_exit(n_total_purged)确定:
Shutdown时退出。当innodb_fast_shutdown!=0或者上次purge的page数为0,返回TRUE。反过来,当innodb_fast_shutdown==0并且上次purge的page数不为0,返回FALSE,表示不退出循环,因为当fastshutdown为0时,需要做完所有purge操作才会结束线程任务。
关注innodb_fast_shutdown参数的意义。
2)如果srv_shutdown_state== SRV_SHUTDOWN_NONE并且
(purge_sys->state== PURGE_STATE_STOP ||n_total_purged == 0)会把coordinate thread挂起。那么什么时候将purge_sys->state置为PURGE_STATE_STOP状态呢?