• 【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,将缓冲池中的页至少刷新到当前重做日志的位置。

  • 相关阅读:
    【JavaScript】LeetCode 383. 赎金信
    在 Windows 用 Chrome System Settings 设置代理
    STM32f767之通用定时器
    docker使用(二)提交到dockerhub springboot制作镜像
    跨境电商独立站如何建立呢?
    调研:huggingface-diffusers
    LabVIEW安装了哪些版本的LabVIEW运行引擎
    oracle12c到19c adg搭建(四)dg搭建
    软件测试下的AI之路(3)
    Blender 学习笔记(一)
  • 原文地址:https://blog.csdn.net/qq_44808472/article/details/126752498