GBase 8s checkpoint 介绍
1. 检查点(Checkpoint)概念
为提升事务性能, 8s 内部使用 BuerPool 机制缓存事务涉及数据, 数据在缓存中被修改, 在
commit 操作之前, 不写入磁盘. 8s 使用逻辑日志与物理日志机制保证数据的正确性/完整性.
为达到及时从异常中恢复的目的, 8s 需定期将缓存中数据写入磁盘. 如图-1 所示.
8s 定期将缓存数据写入磁盘的时间点称为检查点(Checkpoint). 如果数据库发生异常, 则从
最近的一次检查点开始恢复即可.
执行 Checkpoint 时, 只需将缓存中被修改的数据写入磁盘, 而非缓存中全部数据. 即,如果某
页被修改, 则只将此页(脏页)写入磁盘, 而非全部缓存中的页. 写入磁盘后, 脏页仍保留在缓存
中, 其位置从 LRU-M 队列移至 LRU-F 队列, 从而去除脏页状态.
图-2 展示了事务的流程(假设事务 T1 将 t1 表中, id 列值为 10 的行删除)
图中页(page)为 I/O 最小单位, 如果某页中的数据被改动, 整页都需写入磁盘. 缓存中的页
与磁盘中的页一一对应. 图中的 5 个操作解释如下:
1) 将删除操作的纪录从磁盘读入缓存, 读取该纪录所在页到缓存.
2) 将该页写入物理日志, 物理日志存储删除操作之前的数据页, 也称为"前镜像".
3) 将删除操作记入逻辑日志.
4) 修改缓存中对应的页, 将此页中被删除行所在槽位(slot)的长度设置为 0, 以标识该行已