InnoDB(CheckPoint技术)(读MySQL技术内幕-InnoDB存储引擎)

Write Ahead Log策略(事务数据库系统):当事务条件时,先写重做日志,再修改页,(用日志恢复数据)

Checkpoint(检查点)技术(将脏页刷回磁盘)解决的问题:

缩短数据库恢复时间:数据库宕机时,不需要重做所有的日志,因为checkpoint之前的页已经刷到磁盘了

缓冲池不够用时,将脏页刷新到磁盘(给缓冲池腾空间):此时根据LRU算法会溢出最近最少使用的页(脏页),此时需强制执行Checkpoint,将脏页刷回磁盘

重做日志不可用时,刷新脏页(重做日志不可用,即不能保证数据的恢复了,就相当于每次操作都更新磁盘,保证数据准确性):事务数据库对重做日志的设计都是循环使用的(A,B,C三个日志组,当A用完了后,会发生日志切换,开启B(此为循环使用),并将A的数据拷贝到归档日志中(此为归档模式),若不是归档模式,则直接切换到B时,A的数据会丢弃)。

 

InnoDB通过LSN(Log Sequence Number)(8字节的数字)来标记版本,每个数据页,重做日志中,Checkpoint都有LSN,

通过show engine innodb status;查看

Sharp Checkpoint : 数据库关闭时,将所有脏页刷新回磁盘

Fuzzy Checkpoint : 刷新一部分脏页回磁盘(复杂在于刷哪一部分,什么时候刷

     Master Thread Checkpoint:异步的每秒或每十秒在Master Thread中发生,将缓冲池中的脏页列表按照一定比例刷

     FLUSH_LRU_LIST_Checkpoint:Innodb需要保证LRU_List里面必须有1024个空闲页可用,现此检查放在单独的Page Cleaner线程中进行 ,show variables like 'innodb_lru_scan_depth';查看多少空闲页

      Async/Sync Flush Checkpoint:日志文件不可用时,强制将页刷新回磁盘,此时脏页是从脏页列表中选取的,此操作也在Page Cleaner Thread 中,show engine innodb status查看Checkpoint次数(没找到--尴尬)

      Dirty Page too much Checkpoint:脏页数量太多,Innodb强制进行Checkpoint操作,可用命令查看多少比例的时候进行此操作:show variables like 'innodb_max_dirty_pages_pct';(下图表示当脏页数量占据90%时,强制进行Checkpoint)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值