redo日志(二)

redo日志文件由若干个日志文件组成,这些redo日志文件是被循环使用的。redo日志文件组中每个文件的大小都一样,格式也一样,都是由两部分组成:

  • 前2048个字节(也就是前4个block)用来存储一些管理信息。
  • 从第2048个字节往后的字节用来存储log bufferblock的镜像。

lsn指已经写入的redo日志量,flushed_to_disk_lsn指刷新到磁盘中的``redo````日志量,flush链表中的脏页按照修改发生的时间顺序进行排序,也就是按照oldest_modification代表的lsn值进行排序。被多次更新的页面不会重复插入到flush链表中,但是会更新newest_modification属性的值,checkpoint_lsn表示系统中可以被 覆盖的redo日志总量是多少。
redo日志占用磁盘空间在它对应的脏页已经被刷新到磁盘后即可被覆盖。执行一次checkpoint的意思就是增加checkpoint_lsn的值,然后把相关的信息存放到日志文件的管理信息中。
innodb_flush_log_at_trx_commit系统变量控制着在事务提交时是否将该事务运行过程中产生的redo刷新到磁盘。该变量有3个可选值:

  • 0:表示在事务提交时不立即向磁盘同步redo日志,这个任务交给后台线程来处理,这样会明显加快请求处理速度。
  • 1:表示在事务提交时需要将redo日志同步到磁盘,这可以保证事务的持久性。innodb_flush_log_at_trx_commit的默认值是1。
  • 2:表示在事务提交时需要将redo日志写到操作系统的缓冲区中,但并不需要保证将日志真正地刷新到磁盘。

在奔溃恢复过程中,从redo日志文件中第一个文件的管理信息中取出最近发生的那次checkpoint信息,然后从checkpoint_lsn在日志文件组中对应的偏移量开始,一直扫描日志文件中的block,直到某个LOG_BLOCK_HDR_DATA_LEN值不等于512为止,在恢复过程中,使用哈希表可加快恢复过程,并且会跳过已经刷新到磁盘的页面。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值