​GBase 8s checkpoint 介绍

GBase 8s checkpoint 介绍

 

 

1. 检查点(Checkpoint) 概念

    为提升事务性能, 8s 内部使用BufferPool 机制缓存事务涉及数据, 数据在缓存中被修改, commit 操作之前, 不写入磁盘. 8s 使用逻辑日志与物理日志机制保证数据的正确性/ 完整性. 为达到及时从异常中恢复的目的, 8s 需定期将缓存中数据写入磁盘. 如图-1 所示.

    8s 定期将缓存数据写入磁盘的时间点称为检查点(Checkpoint). 如果数据库发生异常, 则从最近的一次检查点开始恢复即可.




 

Buffer     Pool

 

 


 

buff

 

 

buff

 

 

buff

 
 

 LRU-F

 
 

 LRU-M

 
 

buff

 
 

buff

 
 

buff

 
 

buff

 
 

buff

 
        

 

 













 

-1 检查点缓存写入磁盘

 

 

 

 

 

 

 

 


    执行Checkpoint , 只需将缓存中被修改的数据写入磁盘, 而非缓存中全部数据. , 如果某页被修改, 则只将此页( 脏页) 写入磁盘, 而非全部缓存中的页. 写入磁盘后, 脏页仍保留在缓存中, 其位置从LRU-M 队列移至LRU-F 队列, 从而去除脏页状态.

    -2 展示了事务的流程( 假设事务T1 t1 表中, id 列值为10 的行删除)













 

-2 事务流程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


    图中页(page) I/O 最小单位, 如果某页中的数据被改动, 整页都需写入磁盘. 缓存中的页与磁盘中的页一一对应. 图中的5 个操作解释如下:

    1) 将删除操作的纪录从磁盘读入缓存, 读取该纪录所在页到缓存.

    2) 将该页写入物理日志, 物理日志存储删除操作之前的数据页, 也称为" 前镜像".

    3) 将删除操作记入逻辑日志.

    4) 修改缓存中对应的页, 将此页中被删除行所在槽位(slot) 的长度设置为0, 以标识该行已被删除, 随后更新该页的时间戳.

    5) 当执行Checkpoint( 或其它写磁盘操作) , 该页被写入磁盘, 同时将该页从LRU-M 队列移至LRU-F 队列.

 

2. 非阻塞检查点

    8s 具备非阻塞检查点技术, 通过将Checkpoint 流程拆分为多个阶段, 达到将产生阻塞操作的时间缩短到对业务影响最小的程度.

    非阻塞Checkpoint 过程如下:

    1) 阻止全部线程进入新的关键区;

    2) 等待已在关键区中的全部线程退出;

    3) 将缓存中的系统目录表信息写入磁盘;

    4) 将物理/ 逻辑日志缓冲区写入磁盘;

    5) 在逻辑日志中记录检查点;

    6) 将保留页写入磁盘;

    7) 增加检查点序号;

    8) 允许线程进入关键区;

    9) 将缓存中的全部脏页写入磁盘;

    10) 结束检查点操作, 在保留页中更新检查点记录.

 

    当触发非阻塞检查点操作时, 首先阻塞事务的处理, 记录系统恢复信息, 刷写逻辑日志缓冲区中的内容, 记录检查点信息; 随后, 解除事务阻塞, 缓存中的脏数据被写入磁盘; 最后, 将本次检查点操作记录更新至保留页中. 在检查点流程中, 将脏页写入磁盘及随后操作并不会阻塞事务的执行.

 

 


请使用浏览器的分享功能分享到微信等