之前的文章已经说过了在undo purge的情况下会有全量checkpoint,下面记录下其他情况checkpoint的执行时机 srv_master_do_active_tasks 这个函数会定时执行checkpoint
/* Make a new checkpoint */
if (cur_time % SRV_MASTER_CHECKPOINT_INTERVAL == 0) {
srv_main_thread_op_info = "making checkpoint";
log_checkpoint(TRUE, FALSE);
MONITOR_INC_TIME_IN_MICRO_SECS(
MONITOR_SRV_CHECKPOINT_MICROSECOND, counter_time);
}
srv_master_do_idle_tasks这个函数会在空闲的时候执行checkpoint
/* Make a new checkpoint */ srv_main_thread_op_info = "making checkpoint"; log_checkpoint(TRUE, FALSE); MONITOR_INC_TIME_IN_MICRO_SECS(MONITOR_SRV_CHECKPOINT_MICROSECOND, counter_time);
srv_master_do_shutdown_tasks 函数在shutdown的情况下会执行checkpoint
func_exit: /* Make a new checkpoint about once in 10 seconds */ srv_main_thread_op_info = "making checkpoint"; log_checkpoint(TRUE, FALSE);
log_check_margins 函数在检查redo log空间的时候,没有空间了,会执行checkpoint buf_dblwr_create在innodb 初始化创建doublebuffer 的时候会执行checkpoint recv_reset_logs reset log的时候会执行全量的checkpoint row_import_celanup 的时候会执行全量checkpoint fixup_tables_in_non_system_tablespace的情况会执行全量的checkpoint 有兴趣学习源码的加群一起学习啊 QQ: 700072075
