zoukankan      html  css  js  c++  java
  • InnoDB体系架构(三)Checkpoint技术

    Checkpoint技术

      前篇 InnoDB体系架构(二)内存 从缓冲池缓冲池的管理重做日志缓冲额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用到了Checkpoint技术,这篇文章我们着重讲解一下Checkpoint在内存中到应用。

    一、Checkpoint使用背景

      由于日常DML语句,如:Update / Delete操作首先操作了缓冲池的数据,并没有立即写入到磁盘,这有可能会导致内存中数据与磁盘中的数据产生不一致的情况。而与磁盘数据不一致的缓冲池的页就是我们常说的脏页。所以checkpoint的工作就是将内存中的脏页,在一定条件下刷新到磁盘。

      如果在从缓冲池将页数据刷新到磁盘的过程中发生宕机,那么数据就无法恢复了;为了避免这种情况的发生,采用了Write Ahead Log策略,即当事务提交时,先写重做日志,再修改页,这样发生宕机也可以通过重做日志进行恢复

    二、Checkpoint的目的  

      1. 如果重做日志太大,那么数据库启动的时候恢复时间过长

      2. 缓冲池不够用时,需要先将脏页数据刷新到磁盘中;

      3. 重做日志不可用时,刷新脏页到磁盘;

    三、Checkpoint的运作机制

      在了解运作机制之前,先来思考一下这几个问题:Checkpoint发生的时间? 发生的条件? 脏页(对象)的选择?

      在InnoDB存储引擎内部,Checkpoint分为了两种:

      (一) Sharp Checkpoint

        Sharp Checkpoint 发生在数据库关闭时,将所有的脏页都刷新回磁盘,这是默认的工作方式,参数:innodb_fast_shutdown=1。

      (二)Fuzzy Checkpoint

        在InnoDB存储引擎运行时,使用Fuzzy Checkpoint进行页刷新,只刷新一部分脏页。在以下四种情况下会出发Fuzzy Checkpoint:

        1. Master Thread Checkpoint

        对于Master Thread,以每秒或者每N秒的速度将缓冲池的脏页列表刷新一定比例的页回磁盘,这个过程是异步的,用户查询线程不会阻塞。

        2. FLUSH_LRU_LIST Checkpoint

    为了保证LRU列表中有100个左右的空闲页可使用,在InnoDB 1.1.x版本之前,用户查询线程会检查LRU列表是否有足够的空间操作。如果没有,根据LRU算法,溢出LRU列表尾端的页,如果这些页有脏页,需要进行checkpoint。因此叫:FLUSH_LRU_LIST Checkpoint。

    3. Async/Sync Flush Checkpoint

    Async/Sync Flush checkpoint 发生在重做日志不可用的时候(满了),将buffer pool中的一部分脏页刷新到磁盘中,在脏页写入磁盘之后,事物对应的重做日志也就可以释放了。关于redo_log文件的的大小,可以通过innodb_log_file_size来配置。

    4. Dirty Page too much Checkpoint

    即脏页太多,强制checkpoint,保证缓冲池有足够可用的页。
    参数设置:innodb_max_dirty_pages_pct = 75 表示:当缓冲池中脏页的数量占75%时,强制checkpoint。1.0.x之后默认75

          

      

  • 相关阅读:
    织梦分页条添加省略号(支持动态静态)
    织梦点击数或者其他数值过【千】过【万】过【亿】的写法
    织梦文章页每个TAG标签单独输出相关文章
    织梦验证码不显示解决方法总结
    织梦搜索结果根据搜索不同栏目显示不同搜索结果模板
    织梦正则提取中英混合字符串中第一个中文汉字
    织梦让内容摘要多行文本支持换行
    织梦dede:tag标签输入添加自增autoindex
    织梦去除底部版权power by dedecms
    织梦自定义表单添加访客提交时间和访客IP+限制每天每个IP提交表单次数
  • 原文地址:https://www.cnblogs.com/wilburxu/p/8605641.html
Copyright © 2011-2022 走看看