其他分享
首页 > 其他分享> > checkpoint 相关简述

checkpoint 相关简述

作者:互联网

利用checkpoint来去批量刷新到磁盘,在日志重做的时候,就可以在这个点后重新回放对应的东西,然后把没提交的东西回滚

fuzzy checkpoint

        记录checkpoint的起始和结束,start以后的事务无需放置在checkpoint里面,因为之后的事务后面去提交,无需跟随fuzzy checkpoint放置在log中。同时将对应的脏页刷新到磁盘中。

        起始: 就记录start

        结束 包括attdtp

为了达成这个目的,需要以下结构

active transaction table 活动的事务 ATT

        对于每个活动的事务,我们需要记录

        txnId transactionId

        status 当前事务的模式  Running Committing Candidate for Undo

        lastLSN 最近的lsn

dirty page table DTP脏页

        bufferPool中的RecLsn 其中最早的引起页变脏的一个lsn

回滚

        analysis (灰色)分析哪些事务已经提交了,哪些已经failed了

        redo(浅蓝色)重复所有的动作

        undo(深蓝色)回滚所有的失败的动作(包括未提交的)

 mysql回滚具体

1 初始化崩溃恢复

    数据库关闭只有2种情况,正常关闭,非正常关闭(包括数据库实例crash及服务器crash)。

    正常关闭情况,所有buffer pool里边的脏页都会都会刷新一遍到磁盘,同时记录最新LSN到ibdata文件的第一个page中。而非正常关闭来不及做这些操作,也就是没及时把脏数据flush到磁盘,也没有记录最新LSN到ibdata file。

    当我们重启数据库实例的时候,数据库做2个阶段性操作:redo log处理,undo log及binlog 处理。

1.1 redo log处理

    恢复的过程中,注意两个点:打开ibd文件形式,读取数据库到buffer pool的改进。

    根据hash表中的相应信息读取数据页, 读数据页的时候,5.7之前版本采用把所有表空间都打开,所有表格仅执行ReadOnly,5.7版本做了优化,新增了 MLOG_FILE_NAME 记录在checkpoint之后,所有被修改过的信息,根据这些信息,在恢复过程中,只需要打开相应的ibd文件即可,不涉及恢复的表格支持正常DML跟DDL操作,涉及恢复的表格则仅执行ReadOnly功能。

    当把数据页读取到buffer pool中,以往版本是只读取对应的单个页面,而现在的是直接读取与该页面相邻的32个data page 也一起加载的buffer pool,因为一个数据页的修改,可能周围的页面也被修改,一次性读取,可以避免后面根据hash表中再重新读取其相邻的页面。

1.2 undo log及binlog 处理

      上一阶段中,把redo log中的操作都apply到数据页中,但是对于prepare状态的事务却还没有进行回滚处理,这个阶段则是针对prepare状态的事务进行处理,需要使用到binlog和undo log。

 

 后面转载自 https://www.cnblogs.com/xinysu/p/6586386.html


 

标签:hash,log,LSN,undo,checkpoint,简述,相关,redo
来源: https://blog.csdn.net/oneFaceThick/article/details/119490273