innodb数据目录下默认会有2个名为ib_logfile0和ib_logfile1的重做日志文件,mysql写重做日志的过程是,事务进行的过程中,masterthread主线程不断的将事务中的条目,插入到重做日志缓冲,然后同步到磁盘的重做日志文件(ib_logfile),先写日志文件1(ib_logfile0),写满了,再切换至日志文件2(ib_logfile1),当日志文件2被写满了,再切换到日志文件1(ib_logfile0);问题:既然磁盘上的日志文件1和2已经写满了,为什么还会再重新切换到日志1再写入呢?满了还怎么写入?
2 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
innodb的ib_logfile是一个定长的文件,可以通过my.cnf里面的innodb_log_file_size=64M来设置。mysql会在预分配空间里顺序的写入数据,直到写不下就会换到下一个文件继续写,就像在内存里面使用循环数组一样。一般这种log没什么长期存在的价值,所以这样的策略非常节省磁盘空间,且可以避免因为文件大小增长造成的磁盘碎片、额外的IO等问题。
添加回答
举报
0/150
提交
取消