gpt4 book ai didi

algorithm - 当 DBMS 在 ARIES 算法的恢复阶段崩溃时会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:31 24 4
gpt4 key购买 nike

据我对 ARIES 算法的了解,要支持 ACID 事务,必须使用 WAL(预写日志记录):所有写入都会被记录下来。

据说可以让数据库在崩溃前回滚由未提交的事务所做的更改。

对于每次写入,我们都会记录有关实际写入的信息(如何重做,如何撤消)。

在恢复阶段,我们分析日志以执行重做操作:

  • 我们阅读日志条目
  • 我们将更改应用到数据库
  • 我们将日志条目设置为完成

然后,为了执行 UNDO,写入一个新的日志条目(因为毕竟是写入),然后在检查点期间将更改应用到数据库。

在检查点期间,我想我们只是对所有已提交的条目执行重做。

我还没有找到任何关于如果出现以下情况会发生什么的信息:

  • 检查点发生崩溃
  • 在 REDO 阶段发生崩溃,在将更改应用到数据库之后,以及在更新日志以将其设置为完成之前/期间发生崩溃

在这些情况下,一些更改已应用到数据库但未反射(reflect)在日志中,从而使数据库处于不一致状态。

注意:以下是我用来了解有关 ACID 事务和 ARIES 算法的更多信息的一些链接:

我目前正在阅读 SQLite 的源代码,以了解整个事情是如何实现的。

提前感谢您对此主题的任何澄清。

最佳答案

在重做期间,读取日志并修改数据如果需要。如果在 REDO 期间发生崩溃,那么下一次恢复将再次运行 REDO。一些在第一次恢复尝试时确实修改了数据的日志记录将是空操作,因为数据修改已保存。其他的不会被保存,会再次“重做”。

Checkpoint 仍然是一个事务操作。在内存中保存数据,然后最后在日志中写入检查点日志记录。如果在检查点期间发生崩溃,则它只能在写入检查点记录之前发生。崩溃恢复再次运行并从 REDO 开始(因为没有新检查点的记录)。以上几点适用,REDO 可以重复运行。一些日志记录将是空操作,因为数据更改已经保存,一些将再次“重做”。

UNDO 通过生成和写入补偿日志记录来工作。如果在 UNDO 期间发生崩溃,那么在下一次恢复时,还有一个记录需要分析和重做(补偿记录)。后 UNDO 崩溃恢复将运行它的 UNDO 阶段,最后一个成功的 UNDO 日志记录被保存之后开始。也就是说,如果原始日志在未提交的事务中包含两个操作,比如 OP1 和 OP2,然后启动 UNDO,它会写入补偿性 UNDO-OP1 并崩溃。然后恢复将从 OP2 开始撤消,因为对于 OP1,日志中已经有一个补偿记录(UNDO-OP1)。

在正确实现的 ARIES 中,从来没有任何不一致的窗口。

关于algorithm - 当 DBMS 在 ARIES 算法的恢复阶段崩溃时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44857707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com