【深入浅出】什么是 CheckPoint&write pos 

【深入浅出】什么是 CheckPoint&write pos 

关键字:检查点

浅解析 从redo log 看   CheckPoint&write pos   

mysql,如果每次更新操作都要写进磁盘,然后磁盘要找到对应记录,然后再更新,整个过程io成本、查找成本都很高。

解决方案:WAL技术(Write-Ahead Logging)。先写日志,再写磁盘。

具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。

同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。

InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么总共就可以记录 4GB 的操作。

从头开始写,写到末尾就又回到开头循环写,如下面这个图所示。

CheckPoint & write pos图解

write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。checkpoint 是当前要擦除的位置,

也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。

write pos 和 checkpoint 之间的是log上还空着的部分,可以用来记录新的操作。如果 write pos 追上 checkpoint,表示log满了,

这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下。有了 redo log,InnoDB 就可以保证即使数据库

发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。

 

CheckPoint&write pos  的作用

解决以下几个问题:

1 、缩短数据库的恢复时间;
2 、缓冲池不够用时,将脏页刷新到磁盘;(LRU算法,后期会详细解说,这里不做过多解说) 
3 、重做日志不可用时,刷新脏页。
 
        当数据库发生宕机时,数据库不需要重做所有的日志,因为 Checkpoint 之前的页都已经刷新回磁
盘。数据库只需对 Checkpoint 后的重做日志进行恢复,这样就大大缩短了恢复的时间。
当缓冲池不够用时,根据 LRU 算法会溢出最近最少使用的页,若此页为脏页,那么需要强制执行
Checkpoint 将脏页也就是页的新版本刷回磁盘。
 
        当重做日志出现不可用时,因为当前事务数据库系统对重做日志的设计都是循环使用的,并不是让
其无限增大的,重做日志可以被重用的部分是指这些重做日志已经不再需要,当数据库发生宕机
时,数据库恢复操作不需要这部分的重做日志,因此这部分就可以被覆盖重用。如果重做日志还需
要使用,那么必须强制 Checkpoint 将缓冲池中的页至少刷新到当前重做日志的位置。
对于 InnoDB 存储引擎而言,是通过 LSN Log Sequence Number )来标记版本的。
 
总结:
缩短数据库的恢复时间
       缓冲池不够用时,将脏页刷新到磁盘 ( 缓冲池不够用时,根据 LRU 算法会溢出最近最少使用的页,若此页为脏
页,需要强制执行 checkpoint 将脏页刷回磁盘 )
 
      重做日志不可用时,刷新脏页 ( 采用循环使用的,并不是无限增大。当轮询时,此时的重做日志还需要使用,
就必须强制执行 checkpoint 将脏页刷回磁盘 )
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值