【Mysql高级特性】InnoDB Checkpoint与 Redo log

相关文章地址
初探 InnoDB 体系架构 初探 InnoDB 体系架构

💓 Checkpoint 技术背景


InnoDB 对于数据的 update 和 delete 改变了 缓存池中页的记录,那么此时缓存和页的数据比磁盘的数据要新, 数据库需要将新版本的页从缓存池刷新到磁盘中。如果说每做一次更新和删除操作,就把缓存中页的数据刷新到磁盘,那么开销非常大,而且如果把缓存池中页的新版本杀心到磁盘是发生了宕机,那么数据就不能恢复了。为了避免这种情况发生,当前事务数据库都采用了 Wrte Ahead Log 策略,即当事务提交时,先写重做日志,再修改页。当数据库宕机时,可以通过重做日志来完成数据的恢复。


💓Checkpoint 的职责与类型


Checkpoint 的职责 将缓存池中的脏页刷回磁盘 重点在于,每次刷新多少也到磁盘,每次从哪里取脏页,以及什么时候触发 Checkpoint

  • Sharp Checkpoint 发生在数据库关闭时将所有脏页都刷回磁盘
  • Fuzzy Checkpoint 之刷新一部分脏页,而不是刷新所有脏页回磁盘
    • Master Thread Checkpoint:每秒或者10秒的频率异步刷新缓冲池的脏页到磁盘。(由Page Cleaner Thread完成)
    • FLUSH_LRU_LIST Checkpoint:缓冲池不够用时,根据LRU算法会淘汰掉最近最少使用的页,如果该页是脏页的话,会强制执行CheckPoint,将该脏页刷回磁盘(由Page Cleaner Thread完成);
    • Async/Sync Flush Checkpoint:重做日志不可用的情况,需要强制从脏页列表中选取一些脏页刷新磁盘到缓存(由Page Cleaner Thread完成)。

💓Checkpoint 主要解决的问题


  • 缩短数据库的恢复时间
  • 缓冲池不够用将脏页刷新到磁盘
  • 重做日志不可用时,刷新脏页

当数据库宕机时 , 数据库不需要重做所有的日志,因为CheckPoint 之前的页已经刷回磁盘,只需对checkpoint后的重做日志进行恢复。这样就大大缩短了恢复时间。

对于 重做日志来说,没有必要让他无限增大,重做日志的设计都是循环使用的,如果数据库恢复不需要这部分日志,那么他就是可以被覆盖重用。若此时当前重做日志还需要被使用,不可以被覆盖,那么必须强制产生 Checkpoint,将缓冲池中的页至少刷新到当前重做日志的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1999

每人一点点,明天会更好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值