Shadow Paging是一种用于恢复数据库的恢复技术。在这种恢复技术中,数据库被视为由固定大小的逻辑存储单元(称为页面)组成。在页表的帮助下,页被映射到存储的物理块中,页表允许数据库的每个逻辑页一个条目。该方法使用两个名为current page table和shadow page table 的页表。
当前页表中的条目用于指向磁盘上最近的数据库页。当事务开始复制当前页表时使用另一个表,即影子页表。之后,影子页表保存在磁盘上,当前页表将用于事务。当前页表中的条目可能会在执行期间更改,但在影子页表中它永远不会更改。交易后,两个表变得相同。
这种技术也称为位置切割更新。
要理解概念,请考虑上图。在这 2 个写操作是在第 3 页和第 5 页上执行的。在第 3 页写操作开始之前,当前页表指向旧页 3。当写操作开始时,执行以下步骤:
- 首先,在磁盘块中搜索可用空闲块。
- 找到空闲块后,它将第 3 页复制到由第 3 页(新)表示的空闲块。
- 现在当前页表指向磁盘上的第 3 页(新页),但影子页表指向旧页 3,因为它没有被修改。
- 更改现在传播到当前页表指向的第 3 页(新)。
提交操作:
要提交事务,应执行以下步骤:
- 存在于缓冲区中的由事务完成的所有修改都传输到物理数据库。
- 将当前页表输出到磁盘。
- 当前页表的磁盘地址输出到包含影子页表地址的稳定存储中的固定位置。此操作覆盖旧影子页表的地址。有了这个当前页表变得与影子页表相同并且事务被提交。
失败 :
如果系统在事务执行期间但在提交操作之前崩溃,那么仅释放修改的数据库页面并丢弃当前页表就足够了。在事务执行之前,通过重新安装影子页表来恢复数据库的状态。
如果系统崩溃发生在最后一次写操作之后,那么它不会影响事务所做更改的传播。这些更改将被保留,无需执行重做操作。
好处 :
- 这种方法需要较少的磁盘访问来执行操作。
- 在这种方法中,从崩溃中恢复成本低且速度相当快。
- 不需要像撤消和重做这样的操作。
缺点:
- 由于更新数据库导致磁盘上的位置发生变化,因此很难将数据库中的相关页面保持在磁盘上更近的位置。
- 在提交操作期间,更改的块将由影子页表指向,这些块必须返回到空闲块的集合中,否则它们将变得可访问。
- 单个事务的提交需要多个块,这会降低执行速度。
- 要允许这种技术同时处理多个事务是很困难的。