zoukankan      html  css  js  c++  java
  • 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基本上就是以上四种

  • 相关阅读:
    OpenCV2:总结篇 PS算法实现
    DirectX9:第四部分 顶点着色器
    DirectX9:基础篇 第一章 初始化Direct3D
    OpenCV2:高中篇 图像锐化技术-边缘检测算子
    他山之石:C++书籍推荐
    C89:论回调函数
    OpenCV2:幼儿园篇 第六章 图像转换
    四维空间引发-维度空间(0-10)来自我的教授的班长
    802.11全家
    提示窗UIAlertView与UIAlertController的用法(持续更新中)
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/8341395.html
Copyright © 2011-2022 走看看