MySQL checkpoint机制详解

本文深入探讨了MySQL的checkpoint机制,旨在解决数据频繁更新带来的挑战,如防止宕机数据丢失、有效利用Redo日志和管理缓冲区。文章详细介绍了模糊和尖锐检查点,以及flush_lru_list、脏页、自适应刷新、Redo日志管理和限制空闲期间的缓冲区刷新策略。通过对关键参数的调整,可以优化MySQL性能并平衡IO和内存需求。
摘要由CSDN通过智能技术生成

点击上方"蓝字"

关注我们,享更多干货!

MySQL为了保证数据会做很多checkpoint动作。特别是InnoDB采用Write Ahead Log策略来防止宕机导致的数据丢失:即事务提交时,先写重做日志,再修改内存数据页的方式脏数据刷新等。除此之外,还有服务重新启动。

一.checkpoint介绍

checkpoint是为了解决哪些问题呢?

  • 对于数据需要频繁更新的场景,要实时更新,对于MySQL来说,只处理IO,就能把性能耗尽。

  • Redo日志大小也是有限的,通过刷新策略,可以更有效的重复使用文件,不需要开辟新的空间。

  • 缓冲区大小有限。数据不刷到硬盘,对于查询业务,命中率越来越小。

  • 数据库宕机,崩溃恢复期间,需要从上次的检查点进行恢复,使得效率提升。

  • 物理备份日志点。

InnoDB引擎通过LSN(Log Sequence Number)来标记版本,LSN是日志空间中每条日志的结束点,用字节偏移量来表示。每个Page有LSN,每个Redo log有LSN,每个checkpoint也有LSN。

checkpoint会对哪些MySQL实体做操作?

  • Dirty page:InnoDB缓冲池中已经在内存中更新的页面,其中的更改还没有写入(刷新)到数据文件。

  • Flush:将已缓冲在内存区域或临时磁盘存储区域中的数据库文件的更改写入。

  • Redo log:数据更改信息记录文件。

二.checkpoint机制

从官方提供的说明中checkpoint分为两个: 

  • Fuzzy checkpoint:进行部分脏页的刷新,有效循环利用Redo日志。

  • Sharp checkpoint:发生在关闭数据库时,将所有脏页刷回磁盘。

通过以上两个方式,在不同的情况下触发checkpoint:

1) flush_lru_list

flush_lru_list checkpoint是在单独的page cleaner线程中执行的。Buffer Pool的LRU空闲列表中保留一定数量的空闲页面,来保证Buffer Pool中有足够的空间应对新的数据库请求。

在空闲列表不足时,发生flush_lru_list checkpoint,空闲数量阈值是可以配置的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值