Innodb检查点和redo写盘时机


小编给大家分享一下Innodb检查点和redo写盘时机,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
innodb的lsn和oracle的scn一样,是一个重要的概念。是整个数据数据同步的一种统一辨别标准,在很多地方都使用到了LSN比如
在flush list中正是是使用page的oldest lsn作为链表的条件
参考buf_page_t类中的 lsn_t oldest_modification;变量
在checkpoint中记录的也是lsn
参考宏 LOG_CHECKPOINT_LSN
在物理文件中每个page最后的刷新lsn
参考宏FIL_PAGE_LSN
在写日志落盘的时候也是以lsn为标准的
参考函数log_write_up_to
实际上lsn就是表示的日志量的字节数,是一个累加的值,在5.7中表现为:
及一个8字节非负的整数。最大值及2的64次方。有了这种物理上概念,lsn很容易换算为当前日志的偏移量。
这里我只讨论正常运行的情况下检查点。innodb中类似oracle的增量检查点。正常运行checkpoint是由master线程触发。我们知道脏数据通过page clean线程和lru manager线程是在不断写盘的,那么在进行异常重启的的时候我们必须要知道一个恢复的起点,但是这个起点是不能记录在内存中必要固化到磁盘,恢复的时候读取这个点以后的redo进行恢复,而checkpoint就是完成这个事情下面是checkpoint的执行流程。
正常情况下master线程会每秒进行检查点其作用有(参考log_checkpoint函数):
检查是否有自上次检查点以来的脏数据写盘了。
如果有则在redo里面会为每个修改过的文件写入MLOG_FILE_NAME,完成后写入一个总MLOG_CHECKPOINT(参考fil_names_clear函数)。
1、MLOG_FILE_NAME主要记录至上次检查点以来更改过的数据文件。
2、MLOG_CHECKPOINT主要记录检查点的lsn。
这个步骤会遍历fil_system->named_spaces用于查找是否有自上次检查点以来修改过的文件链表。
如果有则在redo log header中写入相应的检查点信息包含(异步写)。
实际上我们可以理解检查点就是由master线程每秒醒来查看一下脏数据写到哪里了,然后将其记录到合适的位置,以备carsh recovery使用。(参考srv_master_thread函数)
下面是一个没有任何更新操作的库的信息如下:
Log sequence number:已经写到log buffer中的lsn。
参考mtr_t::Command::finish_write函数。
Log flushed up to:已经写到日志文件的redo的lsn。
参考log_write_flush_to_disk_low函数。
Pages flushed up to :此lsn之前的脏数据都已经写到了数据文件。
参考log_buf_pool_get_oldest_modification函数。
Last checkpoint at :最后一次检查点记录到了什么位置。
参考next_checkpoint_lsn函数。
下面是这段输出的源码:
一般来讲Log sequence number >Log flushed up to> Pages flushed up to>Last checkpoint at ,但是这里注意一下。Pages flushed up to 697794162和Last checkpoint at 697794153,显然这里是一个没有任何操作的库所以Pages flushed up to应该和Last checkpoint at 相等开发云主机域名,但是这里存在差值,差值为:
697794162-697794153 = 9
这刚好是MLOG_CHECKPOINT的长度源码片段如下:
master 线程每秒调用 栈帧(可能是idle可能是active 和检测是否需要插入缓存合并有关)
master 线程每秒checkpoint调用 (可能是idle可能是active 和检测是否需要插入缓存合并有关)
page clean 线程调用 栈帧
当前线程commit 调用栈帧如下:
innodb shutdown(未debug)
redo buffer不足(未debug) 以上是“Innodb检查点和redo写盘时机”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注开发云行业资讯频道!

相关推荐: MYSQL 是如何登陆和退出

本文主要给大家介绍MYSQL 是如何登陆和退出,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在开发云行业资讯里面关注我的更新文章的。 每天学一点,每天进步一点点看了以上关于MYSQL 是如何登陆和退出,希望能给大家在实际运用中带开发云主机域名…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/22 23:38
下一篇 06/22 23:38

相关推荐