美文网首页
MySQL-InnoDB CheckPoint技术

MySQL-InnoDB CheckPoint技术

作者: agile4j | 来源:发表于2018-10-26 22:03 被阅读55次

    作者:刘仁鹏
    参考资料:《MySQL技术内幕:InnoDB存储引擎》


    1.Write Ahead Log策略

    • Write-Ahead Log (WAL 预写式日志):对数据文件的修改(它们是表和索引的载体)必须是只能发生在这些修改已经记录了日志之后,也就是说,在描述这些变化的日志记录冲刷到永久存储器之后
    • 这是事务ACID中D(Durability持久性)的要求

    2.CheckPoint的目的

    1.缩短数据库的恢复时间

    • 当数据库宕机时,数据库不需要重做所有日志,因为CheckPoint之前的页都已经刷新回磁盘。只需对CheckPoint后的重做日志进行恢复,从而缩短恢复时间

    2.缓冲池不够用时,将脏页刷新到磁盘

    • 当缓存池不够用时,LRU算法会溢出最近最少使用的页,若此页为脏页,会强制执行CheckPoint,将该脏页刷回磁盘

    3.重做日志不可用时,刷新脏页

    • 不可用是因为对重做日志的设计是循环使用的。重做日志可以被重用的部分,是指当数据库进行恢复操作时不需要的部分。若此时这部分重做日志还有用,将强制执行CheckPoint,将缓冲池的页至少刷新到当前重做日志的位置

    3.CheckPoint做的事

    • 将缓存池中的脏页刷回磁盘

    4.LSN(Log Sequence Number)

    • LSN是用来标记版本
    • LSN是8字节的数字
    • 每个页有LSN,重做日志也有LSN,CheckPoint也有LSN

    5.CheckPoint的种类

    1.Sharp CheckPoint

    • 发生在数据库关闭时,会将所有的脏页刷回磁盘

    2.Fuzzy CheckPoint

    • 为提高性能,数据库运行时使用Fuzzy CheckPoint进行页的刷新,即只刷新一部分脏页
    • Fuzzy CheckPoint的种类:
    1. Master Thread CheckPoint
    • 差不多以每秒或每十秒的速度,从缓存池脏页列表中刷新一定比例的页,且此过程是异步的,因此不会阻塞其他操作
    1. FLUSH_LRU_LIST CheckPoint
    • 因为InnoDB需要保证LRU列表中有一定数量的空闲页可使用,倘若不满足该条件,则会将LRU列表尾端的页移除,若这些页中有脏页,则会进行CheckPoint
    • 该检查被放在一个单独的Page Cleaner线程中进行
    • 用户可以通过innodb_lru_scan_depth控制LRU列表的可用页数量,默认为1024
    1. Async/Sync Flush CheckPoint
    • 重做日志文件不可用的情况下,会强制将一些页刷回磁盘
    • Async/Sync Flush CheckPoint是为了重做日志的循环使用的可用性
    • 简单来说,Async发生在要刷回磁盘的脏页较少的情况下,Sync发生在要刷回磁盘的脏页很多时。具体公式略过
    • 这部分操作放入到了Page Cleaner线程中执行,不会阻塞用户操作
    1. Dirty Page too much CheckPoint
    • 是指当脏页比例太多,会导致InnoDB存储引擎强制执行CheckPoint
    • 目的根本上还是为了保证缓冲池中有足够可用的页
    • 比例可由参数innodb_max_dirty_pages_pct控制。若该值为75,表示当缓冲池中脏页占据75%时,强制CheckPoint

    相关文章

      网友评论

          本文标题:MySQL-InnoDB CheckPoint技术

          本文链接:https://www.haomeiwen.com/subject/plxrtqtx.html