redo log日志

8 篇文章 0 订阅

redo log

redo log日志也叫重做日志,记录某个数据页修改操作,如:对表空间xx中的数据页xx中的偏移量xxx的地方更新了数据xxx。当系统宕机后用来恢复至最后一次事务提交的时候。

redo log的结构

当我们修改数据页的几个字节的值,redo log就划分了不同的类型,MLOG_1BYTE类型的日志指修改了1个字节的值,MLOG_2BYTE就是修改了2个字节的值,MLOG_4BYTE是修改了4个字节的值,MLOG_8BYTE是修改了8个字节的值,如果修改了大量值,用MLOG_WRITE_STRING表示。

redo log的大致结构如:
日志类型(MLOG_1BYTE),表空间ID,数据页号,数据页中的偏移量,修改了几个字节,具体修改的数据

redo log block

每次我们redo log写入时,是存放在redo log block中的,一个redo log block是512字节,它分为三部分:块头,块体,块尾。
在这里插入图片描述
12字节header块头分为四部分:
1:4个字节的block no,块编号。
2:2个字节的data length,写入多少的字节数据。
3:2个字节的first record group。每个事物有多个redo log,为一组,第一个日志分组偏移量。
4:4个字节的checkpoint on。

当我们512个字节的redo log block满时,把它写入磁盘redolog文件中去。执行增删改操作后,先进入redo log block这个结构里,然后再进入磁盘文件。

redo log buffer

redo log到底是如何通过内存缓冲之后,再进入磁盘文件里去的,这就涉及到了一个新的组件,redo log buffer,他就是MySQL专门设计了用来缓冲redo log写入的。

redo log buffer其实就是在MySQL启动的时候就会跟操作系统申请一块连续内存空间,类似于buffer pool,buffer pool是申请之后划分了N多个空的缓存页和一些链表结构,便于从磁盘上的数据页加载到内存中,而redo logbuffer也是类似的,申请出来一批连续的内存,这块内存中划分出来多个redo log block。

通过设置mysql的innodb_log_buffer_size可以指定这个redo log buffer的大小, 默认的值就是16MB。

redo log buffer日志什么时候写入磁盘?

1.当redo log buffer的内容使用了一半时,也就是redo log日志占据了8mb时,就会刷入磁盘。

2.当事务提交时,redo log所在的redo log block都刷入磁盘。

3.后台线程定时刷新,每隔1秒就会把redo log buufer 里的redo log block刷到磁盘文件中。

4.Mysql关闭时,redo log block会刷入磁盘。

redo log日志可能会发生的问题:MySQL不停的产生redo log写入日志文件,那么就用一个日志文件写入全部的redo log?

默认的情况下,redo log都会写入一个目录的文件中,这个目录可以通过show variables like 'datadir’进行查看,可以通过innodb_log_group_home_dir参数来设置这个目录,然后redo log日志文件是有多个的,写满了就会写下一个redo log日志文件,通过innodb_log_file_size可以指定每隔redo log文件的大小,默认是48MB,通过innodb_log_files_in_group可以指定日志文件的数量,默认2个。所以默认的情况下,写满第一个redo log文件,写第二个,第二个写满了,覆盖第一个日志文件中原来的redo log,所以默认情况下,mysql保留了最近96MB的redo log,但是够存储上百万条redo log日志了,参数也可以做调整,具体得看实际的业务需求和数据量。
————————————————

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值