• mysql 原理 ~ checkpoint


    一 简介:今天咱们来聊聊checkpoint

    二 定义:

        checkpoin是重做日志对数据页刷新到磁盘的操作做的检查点,通过LSN号保存记录,作用是当发生宕机等crash情况时,再次启动时会查询checkpoint点,在该检查点之后发生的事物修改恢复到磁盘。

    三 

        InnoDB存储引擎内部,两种checkpoint,分别为:
    • Sharp Checkpoint  适用于数据库关闭时的一致性刷新 (数据库关闭时 触发)
    • Fuzzy Checkpoint  适用于数据库运行时的部分页刷新 (数据库运行时周期性触发

    四 常规Fuzzy Checkpoint

         1 master周期性操作

           mysql的master线程会进行周期性ckpt动作,大概10S一次

         2 缓冲池不够用或者触发脏页百分比机制,将脏页刷新回磁盘

        缓冲池不够用时,根据LRU算法,溢出最近最少使用的页,如果页为脏页,强制执行checkpoint,将页刷新回磁盘,达到脏页比时候,也会自动触发.

         3 重做日志不可用(不可被重用,不可被覆盖),刷新脏页

        重做日志不可用,是指,重做日志的这部分不可以被覆盖,为什么?因为:这部分对应的数据还未刷新到磁盘上。重做日志的设计是循环使用的。数据库恢复时,如果不需要,即可被覆盖;如果需要,必须强制执行checkpoint,将缓冲池中的页至少刷新到当前重做日志的位置

    五 数据库关闭方式 Sharp Checkpoint

     在关闭时,参数innodb_fast_shutdown影响着表的存储引擎为InnoDB的行为。该参数可取值为0、1、2。

    1. 0代表当MySQL关闭时,InnoDB需要完成所有的full purge和merge insert buffer操作,这会需要一些时间,有时甚至需要几个小时来完成。如果在做InnoDB plugin升级,通常需要将这个参数调为0,然后再关闭数据库。
    2. 1是该参数的默认值,表示不需要完成上述的full purge和merge insert buffer操作,但是在缓冲池的一些数据脏页还是会刷新到磁盘。
    3. 2表示不完成full purge和merge insert buffer操作,也不将缓冲池中的数据脏页写回磁盘,而是将日志都写入日志文件。这样不会有任何事务会丢失,但是MySQL数据库下次启动时,会执行恢复操作(recovery)

     可以发现,设置shutdown级别也会影响着checkpoint的操作,比如Sharp Checkpoint 不会在=2的情况下触发

    六  监控参数

         通过show engine innodb status 进行观测

         async flush   sync flush (这两个代表当redo不可用时,发生的checkpoint次数)   LRU list flush(这代表当LRU内部缺少空闲页时发生的checkpoint次数)  Flush list Flust(这代表脏页太多发生的checkpoint次数 通常这个是主要输出值,我感觉也包括周期性的mater thread工作)

    七 总结

         在数据库运行期间触发checkpoint基本上就是以上四种

  • 相关阅读:
    装饰器 、迭代器,json,pickle,hash
    装饰器知识
    python 编码问题处理
    大数据组件服务的启动与关闭命令
    网站数据统计分析之一:日志收集原理及其实现
    style资源搜索
    分享5个超实用的办公资源网站,错过就可惜了!
    资源搜索
    七大顶级资源
    hive工具bin下的schematool的作用
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/8341395.html
Copyright © 2020-2023  润新知