InnoDB存储引擎学习-CheckPoint机制

【摘要】
你未必出类拔萃,但一定与众不同

CheckPoint技术
检查点,表示脏页写入到磁盘的时候,所以检查点也就意味着脏数据的写入。
CheckPoint技术主要是为了解决以下几个问题
缩短数据库的恢复时间缓冲池不够用时,将脏页刷新到磁盘重做日志不可用时,刷新脏页
而当数据库发生宕机时,数据库不需要重做所有的日志,因为CheckPoint之前的页都已经刷新…

你未必出类拔萃,但一定与众不同

CheckPoint技术

检查点,表示脏页写入到磁盘的时候,所以检查点也就意味着脏数据的写入。

CheckPoint技术主要是为了解决以下几个问题

  • 缩短数据库的恢复时间
  • 缓冲池不够用时,将脏页刷新到磁盘
  • 重做日志不可用时,刷新脏页

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

而当缓冲池不够用时,根据LRU算法会溢出最近最少使用的页,若此页为脏页,那么需要强制执行CheckPoint,将脏页的新版本刷新回磁盘

重做日志不可用则是因为 事务数据库系统对重做日志的设计都是循环使用的并不是让其无限增大,当某些重做日志不被需要时,下次就会被覆盖重用,还需要使用那么需要强制执行CheckPoint,将脏页的新版本刷新回磁盘

Innodb通过LSN来进行标记版本

Innodb引擎中 CheckPoint分为两种

  • Sharp CheckPoint
  • Fuzzy CheckPoint

Sharp CheckPoint发生在数据库关闭时将所有的脏页都刷新回磁盘中,这是默认的工作方式

若是数据库在运行的时候使用Sharp CheckPoint 那么数据库的可用性就受到影响,所以在Innodb存储引擎内部使用Fuzzy CheckPoint进行页的刷新 只刷新部分脏页 而不是刷新所有的脏页

而在Innodb存储引擎中也可能发生以下几种情况的 Fuzzy CheckPoint

  • Master Thread CheckPoint
    • 在Master Thread 中发生的CheckPoint 差不多会以每秒或者每十秒的速度从缓冲池的脏页列表中刷新一定比例的页回磁盘 这个过程是异步的 此时也能进行其他的操作
  • FLUSH_LRU_LIST CheckPoint
    • 这个则是必须保证LRU列表中有可用的100个空闲页
    • 将LRU列表尾端的页移除的时候,如果这些页中有脏页,那么就需要CheckPoint
  • Async/Sync Flush CheckPoint
    • 重做日志文件不可用的情况下,需要强制将一些页刷新回磁盘,为了保证重做日志的循环使用的可用性
    • Innodb 1.1以前会阻塞当前线程 1.2以后采用了 单独的Page Cleaner Thread,不会阻塞用户查询线程
  • Dirty Page too mush CheckPoint
    • 脏页的数量太多 强制进行CheckPoint 目的是保证缓冲池中有足够多的可用的页
    • 默认脏页占据75%进行强制执行CheckPoint

文章来源: blog.csdn.net,作者:Shmilyꦿ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_44752800/article/details/115873627

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享