前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于checkpoint你可能不知道的事

关于checkpoint你可能不知道的事

作者头像
MySQL数据库技术栈
发布2020-08-25 09:56:45
1K0
发布2020-08-25 09:56:45
举报

我们都知道,当用户修改了数据,数据页在内存中修改后并不是每次都刷新到磁盘上。checkpoint之前的数据页保证一定落盘了,这也代表这这部分redolog可以被覆盖了,checkpoint之后的之后的数据有可能落盘,也有可能没有落盘,所以在进行崩溃恢复时,checkpoint之后的日志还是需要被使用的。innodb会依据脏页的刷新情况,定期推进checkpoint,从而减少数据库崩溃恢复的时间。

checkpoint的作用

  • 缩短数据库的恢复时间
  • 缓冲池不够用时,将脏页刷新到磁盘
  • redolog不可用时,刷新脏页

关于redo log的生成情况分析

关于redo log生成情况可以通过show engine innodb status\G命令查看。

1. Log sequence number,表示数据库开启到现在已经产生的日志量,即LSN,日志序列号,单位是字节,值越大,说明数据库更新越多。通过它可以计算日志的产生速度。

2. Log flushed up to,表示日志已经刷新到哪个点了,它的值>=LSN。

LSN - Log flushed up to表示log buffer中还有多少日志未刷新到磁盘。如果系统hang住了,可以通过LSN - Log flushed up to来看下是否是由于log buffer满了导致系统hang住了。一般情况下,如果超过30%的日志还没有刷新到日志文件中,就需要增大innodb_log_buffer_size的值。

3. Pages flushed up to,表示脏页已经刷到哪个点了,表示这之前的logfile里的日志可以被覆盖了。

2-3表示不可覆盖的脏页的量,如果它的值较小,说明Log flushed up to和Pages flushed up to的值比较接近,表示脏页刷的比较快,可以被覆盖的logfile就多。如果2-3的值大,表示脏页刷新的速度慢,能被覆盖的logfile就少。

4. Last checkpoint at,表示最后一次检查点的log位置。它的值表示系统启动时从哪个点去恢复,redo log做崩溃恢复时指定的起点。去做崩溃恢复时,终点是最新的一条logfile,起点就是checkpoint,记录的最早脏的点。

3-4表示checkpoint这个动作的跟进速度。值大表示需要提高checkpoint的跟进速度。

2-4表示崩溃后日志要恢复的量。

checkpoint的工作机制

checkpoint有两种方式,sharp checkpointfuzzy checkpoint

1. sharp checkpoint:完全检查点,数据库正常关闭时,会触发把所有的脏页都写入到磁盘上,这就是完全检查点,数据库正常运行过程中不会使用sharp checkpoint。

2. fuzzy checkpoint:模糊检查点,主要有以下四种情况:

  • master thread checkpoint:以每秒或者每十秒的速度从缓冲池的脏页列表中刷新一定比例的脏页回磁盘,这个过程是异步的,不会阻塞用户线程。
  • flush_lru_list checkpoint:通过参数 innodb_lru_scan_depth 控制LRU列表中可用页的数量,发生了这个checkpoint时,说明脏页写入速度过慢。
  • async/sync flush checkpoint:指的是重做日志不可用的情况。当重做日志不可用时, 如果不能被覆盖的脏页数量(2-3)达到 75%时,触发异步checkpoint。 不能被覆盖的脏页数量(2-3)达到90%时,同步并且阻塞用户线程,然后根据 flush 列表最早脏的顺序刷脏页。 当这个事件中的任何一个发生的时候,都会记录到errlog 中,一旦errlog出现这种日志提示,一定需要加大logfile的组数。
  • dirty page too much checkpoint:脏页太多时,也会发生强制写日志,会阻塞用户线程,由innodb_max_dirty_pages_pct参数(默认75%)控制。

小结

mysql数据库为了提高事务的操作效率,在事务提交之后并不会立即将修改后的数据写入磁盘,而是通过日志先行(write log ahead)的策略保证事务的持久性。对于脏页,则通过异步的方式刷新到磁盘上,MySQL则是采用了checkpoint技术实现了异步刷新脏页的目的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL数据库技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档