InnoDB存储引擎的重做日志文件(Redo log)

默认情况下,InnoDB存储引擎的数据存放目录下有两个名为ib_logfile0ib_logfile1文件,这两个文件就是重做日志文件(redo log file),该文件记录了对于InnoDB存储引擎的事务日志。

重做日志的作用是当数据库发生宕机导致发生media failure时,可以通过这个文件进行数据恢复,用来保证InnoDB表存储的数据不会轻易因为宕机而丢失。具体来说,就是用来恢复已经提交的事务中因为宕机的缘故还没有来得及持久化到磁盘的事务操作

重做日志缓冲(redo log_buffer)

重做日志缓冲用来缓冲重做日志,默认大小为8MB,可通过配置项innodb_log_buffer_size设置大小,一般来说不需要设置地很大。

重做日志缓冲会在以下时机将缓冲内容持久化到重做日志文件:

  1. 每1秒钟自动刷新,由Master Thread执行
  2. 事务提交时
  3. 重做日志缓冲小于50%

可以看出重做日志缓冲刷新得很频繁,所以也就不需要设置很大的空间了。重做日志缓冲刷新到物理磁盘时,是按1个扇区(512字节)的大小进行写入的,可以保证写入必然是成功的,无需进行doublewrite操作。

重做日志文件组

每个InnoDB存储引擎有至少一个重做日志文件组,每个文件组下至少有两个重做日志文件,大小一致,运行过程中以循环写入方式运行。

用户也可以设置多个镜像日志组,达到将不同的文件组分别存入到不同的物理磁盘上,达到高可用性。
默认情况下,InnoDB具有1个重做日志组,每个重做日志组有2个重做日志文件。

配置参数
参数名作用
innodb_log_file_size可以指定每个重做日志文件的大小,最大值可设置为512GB
innodb_log_files_in_group每个日志文件组中重做日志文件的数量,默认为2
innodb_mirrored_log_groups日志组的数量,默认为1
innodb_log_group_home_dir日志文件组所在路径
重做日志文件大小设置过大或过小会产生的问题

重做日志的大小设置对InnoDB性能有着很大的影响。如果重做日志文件设置得很大,在宕机后进行恢复的时间会很长。如果设置地太小,会导致一个事务的日志可能需要多次切换重做日志文件,同时也会导致频繁发生async checkpoint从而引发性能抖动。

与二进制日志的区别

1、二进制日志是构建于MySQL整体上的,不仅仅是InnoDB,它可以记录MyISAM等其它存储引擎的日志。而InnoDB的重做日志只记录InnoDB表的页操作。

2、在内容上:二进制日志本质上记录的还是逻辑的SQL设置,类似于每行修改了哪些数据。而重做日志记录的是数据页的物理修改操作,可以通过它来恢复到最后一个事务提交的点。

3、在写入时机上:二进制日志只在事务提交前写入事务内容,对于不支持事务的存储引擎,会在每次执行修改的SQL语句时写入修改内容。对于重做日志,会在事务进行过程中不停地写入到redo log_buffer,然后持久化到重做日志文件。

重做日志格式

重做日志由多个日志条目(redo entry)组成,日志条目由4个部分组成:

  • redo_log_type:占用1个字节,表示重做日志类型
  • space:表空间ID,采用压缩方式,占用空间一般小于4个字节
  • page_no:数据页的偏移量,采用压缩方式
  • redo_log_body:数据部分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值