数据日志中的checkpoint

根据redo log或undo log进行数据恢复时,是不是要扫描整个数据文件? 那未免太重了。

如果我们可以确信在log的某一点之前,数据都是完整的,那么我们就只需要处理这一点之后的log.

这个点就叫做"checkpoint".  在log中定期地生成checkpoint, 进行数据恢复时再找到最后一个checkpoint, 即可像上面所说的那样节省工作量。

以undo logging为例。生成checkpoint的简单办法是:

引用

1. 禁止启动新的transaction

2. 待所有transaction已经commit或abort

3. 将log flush至disk

4. 在log中生成一个<checkpoint>标识并flush至disk

5. 允许新的transaction

当然这种办法过于粗暴,由于禁止新transaction, 它会导致DB一段时间不可用; 有其他的机制如nonquiscent checkpointing, 可以不影响可用性。 具体就不说了。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.