checkpoint技术mysql_浅谈checkpoint技术

MySQL中,一条DML语句,如delete或者update,改变了页中的记录,那么此时页是脏的,即缓冲池的页的版本比磁盘的新,数据库需要将缓冲池的数据刷新到磁盘。

如果每次缓冲池的页发生变化,都要将新版本的页刷新到磁盘,那么性能消耗一定很大,如果将脏页刷新到磁盘的过程中发生宕机,那么数据就不能恢复了。为了避免发生数据丢失的问题,事务数据库系统都采用了Write Ahead Log的策略,即日志先行,先写重做日志,再修改页。

假设以下场景,是不是缓冲池的脏页可以不刷回磁盘?

1、缓冲池足够大,可以缓冲磁盘的所有数据

2、重做日志可以无限增大

对于第一个场景:

生产环境中,3TB体量的数据库已不少见,甚至更大,而3TB内存的服务器却几乎没有,所以这种场景几乎不可能。

对于第二个场景:

重做日志无限增大,意味着DBA或者SA需要实时监控存储的使用情况,且设备可以无限动态扩展,这种场景也几乎不可能实现。

即便上述场景可以实现,可是一旦MySQL服务器宕机,重新应用重做日志的时间会非常久,甚至达到几年。

因此出现了checkpoint技术,主要解决以下问题:

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

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

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

在innodb内部,有两种checkpoint,分别为:

Sharp Checkpoint

Fuzzy Checkpoint

sharp checkpoint即数据库发生关闭时候,将脏页刷新到磁盘,这是默认的工作方式,即innodb_fast_shutdown=1。

若数据库运行时候采用

sharp checkpoint,那么数据库的可用性将受到很大影响。数据库运行时候采用fuzzy checkpoint刷新脏页,即只刷新部分脏页,而不是所有脏页到磁盘。

innodb可能发生以下几种情况的

sharp checkpoint:

Master Thread Checkpoint

FLUSH_LRU_LIST Checkpoint

Asnc/Sync Flush Checkpoint

Dirty Page too much Checkpoint

Master Thread Checkpoint

新版本将刷脏独立为page cleaner thread,每秒或者每十秒将脏页刷新到磁盘。

FLUSH_LRU_LIST Checkpoint

LRU列表没有足够空闲页时候,刷脏。

FLUSH_LRU_LIST Checkpoint

重做日志不可用的时候,进行刷脏。

Dirty Page too much Checkpoint

缓冲池脏页太多时候,自动刷脏,由参数innodb_max_dirty_pages_pct控制,其值为75时,表示缓冲池脏页占据75%时候,将强制checkpoint,刷新一部分脏页到磁盘。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值