【Msql阅读笔记】| 四、InnoDB存储引擎之Checkpoint技术

一、为什么需要Checkpoint技术

1、数据新页每次当页发生变化,就将新页的版本刷新到磁盘,那么这个开销是非常大的。

2、从缓冲池中将页的新版本刷新到磁盘时发生了宕机,那么数据就不能恢复。

3、为了避免数据丢失问题、数据库事务采用了Write Ahead Log策略,宕事务提交时,先写重做日志,再修改页。

4、数据发生丢失时可以通过重做日志完成数据的恢复 ==> 事务ACID 中的D(Durability持久性)的要求

二、Checkpoint技术可以解决的痛点

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

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

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

4、当因为宕机发生数据丢失时只需对Checkpoint后的重做日志进行恢复 => 缩短了恢复的时间

5、根据LRU 算法会溢出最近最少使用的页,若次页为脏页 => 需要强制执行Checkpoint,将脏页(页的新版本)刷回磁盘

> show engine innodb status

三、两种Checkpoint

1、sharp Checkpoint

sharp Checkpoint 发生在数据库关闭时将所有的脏页都刷新回磁盘,默认的工作方式。参数:innodb_fast_shutdown=1

2、Fuzzy Checkpoint

存储引擎内部使用进行刷页,即只刷新一部分脏页(修改的页),而不是刷新所有的脏页回磁盘

1)Master Thread Checkpoint

  1. FLUSH_LRU_LIST Checkpoint

检查是否有可用的空闲页,没有就需要对脏页Checkpoint

参数:innodb_lru_sacn_depth 默认大小:1024

show variables like 'innodb_lru_sacn_depth'

  1. Async/Sync Flush Checkpoint:为了保证重做日志的循环使用的可用性

指的是重做日志文件不可用的情况

# 已经写入到重做日志的LSN (redo_lsn),已经刷新回磁盘的最新页LSN (checkpoint_lsn) 则可定义
checkpoint_age = redo_lsn - checkpoint_lsn

async_water_mark = 75% * tatal_redo_log_file_size
sync_water_mark = 90% * total_redo_log_file_size

当checkpoint_age < async_water_mark 不需要刷新任何脏页

async_water_mark < checkpoint_age < sync_water_mark 触发Async Flush 从flush列表中刷新足够的脏页回磁盘 使得checkpoint_age < async_water_mark

checkpoint_age > sync_water_mark 触发sync flush 操作,从flush 列表中刷新足够的脏页回磁盘 ,使得checkpoint_age < async_water_mark

> show engine innodb status
  1. Ditry Page too much Checkpoint:脏页数量太对,导致innodb存储引擎强制进行Checkpoint

可由参数:innodb_max_dirty_pages_pct控制

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值