MySQL 引擎特性 InnoDB redo log漫游(3)

和Checkpoint检查点相关的成员变量:

变量名描述
ib_uint64_t next_checkpoint_no   每完成一次checkpoint递增该值  
lsn_t last_checkpoint_lsn   最近一次checkpoint时的lsn,每完成一次checkpoint,将next_checkpoint_lsn的值赋给last_checkpoint_lsn  
lsn_t next_checkpoint_lsn   下次checkpoint的lsn(本次发起的checkpoint的lsn)  
mtr_buf_t* append_on_checkpoint   5.7新增,在做DDL时(例如增删列),会先将包含MLOG_FILE_RENAME2日志记录的buf挂到这个变量上。 在DDL完成后,再清理掉。(log_append_on_checkpoint),主要是防止DDL期间crash产生的数据词典不一致。 该变量在如下commit加上: a5ecc38f44abb66aa2024c70e37d1f4aa4c8ace9  
ulint n_pending_checkpoint_writes   大于0时,表示有一个checkpoint写入操作正在进行。用户发起checkpoint时,递增该值。后台线程完成checkpoint写入后,递减该值(log_io_complete)  
rw_lock_t checkpoint_lock   checkpoint锁,每次写checkpoint信息时需要加x锁。由异步io线程释放该x锁  
byte* checkpoint_buf   Checkpoint信息缓冲区,每次checkpoint前,先写该buf,再将buf刷到磁盘  

其他状态变量

变量名描述
bool check_flush_or_checkpoint   当该变量被设置时,用户线程可能需要去检查释放要刷log buffer、或是做preflush、checkpoint等以防止Redo 空间不足  
lsn_t write_lsn   最近一次完成写入到文件的LSN  
lsn_t current_flush_lsn   当前正在fsync到的LSN  
lsn_t flushed_to_disk_lsn   最近一次完成fsync到文件的LSN  
ulint n_pending_flushes   表示pending的redo fsync,这个值最大为1  
os_event_t flush_event   若当前有正在进行的fsync,并且本次请求也是fsync操作,则需要等待上次fsync操作完成  

log_sys与日志文件和日志缓冲区的关系可用下图来表示:

InnoDB日志文件和缓冲区对应关系

Mini transaction

Mini transaction(简称mtr)是InnoDB对物理数据文件操作的最小事务单元,用于管理对Page加锁、修改、释放、以及日志提交到公共buffer等工作。一个mtr操作必须是原子的,一个事务可以包含多个mtr。每个mtr完成后需要将本地产生的日志拷贝到公共缓冲区,将修改的脏页放到flush list上。

mtr事务对应的类为mtr_t, mtr_t::Impl中保存了当前mtr的相关信息,包括:

变量名描述
mtr_buf_t m_memo   用于存储该mtr持有的锁类型  
mtr_buf_t m_log   存储redo log记录  
bool m_made_dirty   是否产生了至少一个脏页  
bool m_inside_ibuf   是否在操作change buffer  
bool m_modifications   是否修改了buffer pool page  
ib_uint32_t m_n_log_recs   该mtr log记录个数  
mtr_log_t m_log_mode   Mtr的工作模式,包括四种: MTR_LOG_ALL:默认模式,记录所有会修改磁盘数据的操作;MTR_LOG_NONE:不记录redo,脏页也不放到flush list上;MTR_LOG_NO_REDO:不记录redo,但脏页放到flush list上;MTR_LOG_SHORT_INSERTS:插入记录操作REDO,在将记录从一个page拷贝到另外一个新建的page时用到,此时忽略写索引信息到redo log中。(参阅函数page_cur_insert_rec_write_log)  
fil_space_t* m_user_space   当前mtr修改的用户表空间  
fil_space_t* m_undo_space   当前mtr修改的undo表空间  
fil_space_t* m_sys_space   当前mtr修改的系统表空间  
mtr_state_t m_state   包含四种状态: MTR_STATE_INIT、MTR_STATE_COMMITTING、 MTR_STATE_COMMITTED  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8cd87edb4eabf47a36398be5984e79ac.html