从上边的描述中可以看到,磁盘上的redo⽇志⽂件不只⼀个,⽽是
以⼀个⽇志⽂件组的形式出现的。这些⽂件以ib_logfile[数字]
(数字可以是0、1、2...)的形式进⾏命名。在将redo⽇志写⼊⽇
志⽂件组时,是从ib_logfile0开始写,如果ib_logfile0写满
了,就接着ib_logfile1写,同理,ib_logfile1写满了就去写
ib_logfile2,依此类推。如果写到最后⼀个⽂件该咋办?那就重
新转到ib_logfile0继续写,所以整个过程如下图所示:
总共的redo⽇志⽂件⼤⼩其实就是:innodb_log_file_size ×
innodb_log_files_in_group。
⼩贴⼠:如果采⽤循环使⽤的⽅式向redo⽇志⽂件组⾥写数据的
话,那岂不是要追尾,也就是后写⼊的redo⽇志覆盖掉前边写的
redo⽇志?当然可能了!所以设计InnoDB的⼤叔提出了
checkpoint的概念,稍后我们重点唠叨~
redo⽇志⽂件格式
我们前边说过log buffer本质上是⼀⽚连续的内存空间,被划分成
了若⼲个512字节⼤⼩的block。将log buffer中的redo⽇志刷新到
磁盘的本质就是把block的镜像写⼊⽇志⽂件中,所以redo⽇志⽂件
其实也是由若⼲个512字节⼤⼩的block组成。
redo⽇志⽂件组中的每个⽂件⼤⼩都⼀样,格式也⼀样,都是由两
部分组成:
文档被以下合辑收录
评论