lsn mysql_MySQL数据库之mysql 之 checkpoint和LSN详解

lsn mysql_MySQL数据库之mysql 之 checkpoint和LSN详解本文主要向大家介绍了 MySQL 数据库之 mysql 之 checkpoint 和 LSN 详解 通过具体的内容向大家展现 希望对大家学习 MySQL 数据库有所帮助 checkpoin 是重做日志对数据页刷新到磁盘的操作做的检查点 通过 LSN 号保存记录 作用是当发生宕机等 crash 情况时 再次启动时会查询 checkpoint 点 在该检查点之后发生的事物修改恢复到磁盘 mysql gt showengine

本文主要向大家介绍了MySQL数据库之mysql 之 checkpoint和LSN详解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

checkpoin是重做日志对数据页刷新到磁盘的操作做的检查点,通过LSN号保存记录,作用是当发生宕机等crash情况时,再次启动时会查询checkpoint点,在该检查点之后发生的事物修改恢复到磁盘。

mysql> show engine innodb status\G;

LOG

Log sequence number

Log flushed up to  

Pages flushed up to

Last checkpoint at  

0 pending log flushes, 0 pending chkp writes

13 log i/o’s done, 0.81 log i/o’s/second

Last checkpoint at就是系统最后一次刷新buffer pool中页数据到磁盘的checkpoint,checkpoint是和redo log进行关联操作的,也就记录在redo log中,checkpoint记录在redo log第一个文件的头部,存储两个值循环更替修改。

LSN(log sequence number)日志序列号,5.6.3之后占用8字节,LSN主要用于发生crash时对数据进行recovery,LSN是一个一直递增的整型数字,表示事务写入到日志的字节总量。

LSN不仅只存在于重做日志中,在每个数据页头部也会有对应的LSN号,该LSN记录当前页最后一次修改的LSN号,用于在recovery时对比重做日志LSN号决定是否对该页进行恢复数据。前面说的checkpoint也是有LSN号记录的,LSN号串联起一个事务开始到恢复的过程。

LOG

Log sequence number

Log flushed up to  

Pages flushed up to

Last checkpoint at  

0 pending log flushes, 0 pending chkp writes

13 log i/o’s done, 0.81 log i/o’s/second

再用上面的结果看下,log sequence number就是当前产生最新的日志序列号

log flushed up to:已经刷新到redo log磁盘文件的LSN号

pages flushed up to:该项是5.6新加入的,这个官网也未做介绍,而又先于checkpoint,个人理解为已经在buffer poll中写入到数据脏页上的LSN号

在生产环境中往往last checkpoint 会落后log sequence number许多,checkpoint记录数据页刷新情况,而数据页刷新是有MySQL内部机制决定,所以会存在差值,而为了保证数据库发生crash再启动数据不丢失,我们需要把redo log刷新配置项innodb_flush_sync配置为1,让redo log在事务结束时就刷新到磁盘,以用redo log来做数据恢复。所以log flushed up to的LSN号都会与log sequence number一致。

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216755.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:08
下一篇 2026年3月18日 上午11:08


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号