ARIES

ARIES: Algorithm for Recovery and Isolation Exploiting Semantics?翻译成中文就是基于语义的一种恢复算法。 在数据库的角度,这个就是用来恢复数据库,比如遇到突然停电什么的,数据库停了。若干时间之后又来电了,那么数据库是如何恢复到之前的健康状态的。

储备概念介绍

先介绍几个概念:

  • WAL(Write Ahead Log)是再执行txn之前先把该txn的日志写了,然后再执行该txn。
  • CheckPoint: WAL的存在,使得我们只要把WAL里的log全都执行一遍,必然是可以恢复数据库的,但是如果WAL很多,这个回放的时间就会很长,为了避免回放时间过长,我们就会定时的做CheckPoint,回放的时候仅需要从CheckPoint开始就可以了。CheckPoint就是表示WAL中的某条log。
  • LSN:log sequence Number,就当作是一个递增序号就可以了。

再详细的讲讲CheckPoint里的两个东西: DPT ATT Dirty Page Table 与 Active Transaction Table。 从写下CheckPoint这条日志的时候,就会把Dirty Page与 Active Transaction给记录下来。

数据恢复

有了上面的知识储备,下边就可以开始讲如何开始做数据恢复了。

假设在某个时间点数据库崩了。在此之前我们有一个CheckPoint。 恢复又分为三个阶段:

  1. Analysis
  2. Redo
  3. Undo

Analysis

从CheckPoint开始扫描WAL,然后根据log更新ATT与DPT,比如某些Txn已经Commit了,那就把它从ATT中删除,或者某些DPT已经落盘了就也把它移除,反过来,某些txn增加了的DP也要加入DPT,新增的txn也要加入ATT。

Redo

Analysis阶段找到的ATT中的所有的log都执行一遍,使得数据库回到崩溃前的状态。

Undo

Redo之后仍然有未提交的txn,就给他们做undo,认为他们就是Abort了。