Innodb redo log之flush list
Innodb维护一个flush list链表,保存所有的脏页。脏页按照第一次修改的时间顺序进行排序。
在mtr_commit中将redo从mtr->log中刷到redo log buffer中后,产生LSN后,通过判断LSN决定是否将该页放到flush list中。
mtr_commit
mtr_log_reserve_and_write
mtr->end_lsn = log_reserve_and_write_fast(first_data, len, &mtr->start_lsn);
if (mtr->end_lsn) {
mtr_add_dirtied_pages_to_flush_list(mtr);
return;
}
函数解析:
mtr_add_dirtied_pages_to_flush_list(mtr_t* mtr) /*!< in/out: mtr */
1、 通过log_sys->log_flush_order_mutex确保每次只有一个脏页顺序插入flush list
2、 如果没有脏页,不需要申请log_
Innodb维护一个flush list链表,保存所有的脏页。脏页按照第一次修改的时间顺序进行排序。
在mtr_commit中将redo从mtr->log中刷到redo log buffer中后,产生LSN后,通过判断LSN决定是否将该页放到flush list中。
mtr_commit
mtr_log_reserve_and_write
mtr->end_lsn = log_reserve_and_write_fast(first_data, len, &mtr->start_lsn);
if (mtr->end_lsn) {
mtr_add_dirtied_pages_to_flush_list(mtr);
return;
}
函数解析:
mtr_add_dirtied_pages_to_flush_list(mtr_t* mtr) /*!< in/out: mtr */
1、 通过log_sys->log_flush_order_mutex确保每次只有一个脏页顺序插入flush list
2、 如果没有脏页,不需要申请log_