InnoDB存储引擎
时间:2021-07-01 10:21:17
帮助过:23人阅读
如果每一次改变都要进行提交,那么开销会很大,所以一般会使用一种Write Ahead Log策略,当事物提交的时候,先写日志再进行修改。日志可以帮助进行数据的恢复。 checkpoint技术主要是为了解决以下几个问题:
缩短数据库的恢复时间
缓冲池不够用时,将脏页刷新到磁盘
重做日志不可用时,刷新脏页
此外,当数据库缓冲池不够用,根据LRU算法会移除一些不常用的页,若此时的页为脏页则需要强制执行checkpoint。在这本书中作者把checkpoint分成了两种,Sharp Checkpoint和Fuzzy Checkpoint
Sharp Checkpoint指:在数据库关闭的时候将所有的脏页进行刷新Fuzzy Checkpoint指:在数据库运行时候刷新,但是只刷新一部分的脏页
具体的Fuzzy Checkpoint可以分成4种: Master Thread CheckPoint,在Master Thread的过程中发生,以1~10s的速度从缓冲池中的脏页进行刷新回磁盘,而且这个是异步的操作。 FLUSH_LRU_LIST Checkpoint InnoDB引擎需要差不多100个空白页进行使用(这是前提),进行操作之前需要检查(TM的1.1X之前),如果没有100个空白页就需要进行对后面的一部分脏页进行CheckPoint,这就是
FLUSH_LRU_LIST Checkpoint Async/Sync Flush CheckPoint 是重做日志中不可用的情况,这时需要强制将一些页刷新回磁盘。这时候的脏页是从脏页列表中选取的,若将已经写入到重写日志中带LSN标记为redo_lsn。
最后一种情况Dirty Page too much看名字就知道了,太多的脏页进行了刷新。
Master Thread工作方式1.0.X之间的Master Thread是最高线程优先级别,内部由多个循环组成:主键环、后台循环
、刷新循环、暂停循环。Master Thread会根据情况进行切换。主循环是通过thread sleep来实现,这意味着每秒一次或者每10秒一次的操作其实是不准确的。在负载很大的情况下回有延迟,只能说大概在这个频率下。每一秒的操作包括:日志缓冲刷新到磁盘,即使这个事务还没有提交。合并插入缓冲。至多刷新100个InnoDB的缓冲池中的脏页到磁盘。如果没有用户活动,切换到background loop即使没有事务提交,引擎依然会重做日志的缓冲,将内容刷新到重做日志。合并插入缓冲不是每一次都发生会先去判断,前1秒的IO操作数据,如果小于5次就会发生,因为它认为当前是适合进行合并插入的。
InnoDB关键特性插入缓冲
、两次写、自适应hash索引、异步IO、刷新相邻页
来自为知笔记(Wiz)
InnoDB存储引擎
标签:核心 过程 支持 算法 row 改变 content spl 系统