zoukankan      html  css  js  c++  java
  • Mysql的InnoDB引擎-3.CheckPoint技术、Master Thread

    CheckPoint技术

    数据库每次更新数据的时候都要将脏页刷新会磁盘,同时在事务提交中要先写重做日志,再修改页;在以上过程中发生宕机的,数据如何恢复,脏页刷新到哪里,为了解决这些问题,提出了checkPoint技术。

    • 当数据库宕机的时候,数据库不需要重做左右日志,因为CheckPoint之前的页都已经刷新回磁盘,故数据库只需要对checkPoint之后的重做日志进行恢复,这样大大缩短了数据库恢复时间。
    • 当缓冲池不够用的时候,根据LRU算法会溢出最近最少使用的页,若这些页为脏页,那么需要执行CheckPoint,将脏页刷新回磁盘。
    • 重做日志不可用的时候,选择Flush列表中的脏页刷新回磁盘。

    Master Thread 工作模式

    Master Thread具有最高的线程优先级别。内部由多个循环组成:主循环(loop)、后台循环(backgroup loop)、刷新循环(flush loop)、暂停循环(suspend loop)。Master Thread会根据数据库的运行状态在四种循环中切换状态。

    1.0版本之前

    每秒操作:

    • 日志缓冲刷新到磁盘,即使这个事务还没提交(总是)
    • 合并插入缓冲(可能)
    • 至多刷新100个InnoDB的缓冲池中的脏页到磁盘(可能)
    • 如果没有当前用户活动,则切换到backgroup loop(可能)

    每10秒的操作:

    • 刷新100个脏页到磁盘(可能)
    • 合并至多5个插入缓冲(总是)
    • 将日志缓冲刷新到磁盘(总是)
    • 删除无用的undo页(总是)
    • 刷新100个或者10个脏页到磁盘(总是)

    backgroup loop执行的操作:

    • 删除无用的undo页(总是)
    • 合并20个插入缓冲(总是)
    • 跳回到祝循环(总是)
    • 不断刷新100个页直到符合条件(可能,跳转到flush loop中完成)

    1.2版本之前

    在1.0版本基础上进行了部分优化:

    • 合并插入缓冲时,合并插入缓冲的数量可以配置。(innodb_io_capacity值的5%)
    • 在从缓冲区刷新脏页的时候,刷新脏页的数量可以进行配置。(innodb_io_capacity值)

    1.2版本

    为了减轻Master Thread 的压力,将刷新页的操作从Master Thread线程分离到一个单独的Page Cleaner Thread中。同时在InnoDB闲置的时候,会执行每10秒的操作,其余的时间执行每秒的操作。

  • 相关阅读:
    32、至少列举8个常用模块都有那些?
    31、如何安装第三方模块?以及用过哪些第三方模块?
    uva120 Stacks of Flapjacks (构造法)
    stringstream的基本用法
    Codeforces Round #246 (Div. 2) C. Prime Swaps(贪心,数论)
    Codeforces Round #271 (Div. 2)D(递推,前缀和)
    poj3061 Subsequence&&poj3320 Jessica's Reading Problem(尺取法)
    Codeforces Round #266 (Div. 2)B(暴力枚举)
    uva10815(set的应用)
    uva489(需要考虑周全)
  • 原文地址:https://www.cnblogs.com/wangb0402/p/12712276.html
Copyright © 2011-2022 走看看