📜  影子分页介绍

📅  最后修改于: 2021-08-24 05:02:20             🧑  作者: Mango

影子分页是用于恢复数据库的恢复技术。在这种恢复技术中,数据库被视为由固定大小的存储逻辑单元(称为页面)组成。页面在页面表的帮助下被映射到物理存储块中,该页面表允许数据库的每个逻辑页面有一个条目。此方法使用两个页面表,分别称为当前页面表影子页面表

当前页表中存在的条目用于指向磁盘上的最新数据库页。事务开始时使用另一个表,即“影子”页表,该表正在复制当前页表。此后,影子页表将保存在磁盘上,并且当前页表将用于事务。当前页表中存在的条目在执行期间可能会更改,但在影子页表中则永远不会更改。交易后,两个表变得相同。

此技术也称为“原位剪切”更新。

要了解概念,请考虑上图。在这2个操作中,分别在第3页和第5页执行写操作。在第3页上的写操作开始之前,当前页表指向旧页3。当写操作开始时,执行以下步骤:

  1. 首先,开始搜索磁盘块中的可用空闲块。
  2. 找到可用块后,它将第3页复制到由第3页(新)表示的可用块。
  3. 现在,当前页表指向磁盘上的第3页(新),但是影子页表指向旧页3,因为它没有被修改。
  4. 现在,更改将传播到当前页表指向的第3页(新)。

提交操作:
要提交事务,应执行以下步骤:

  1. 缓冲区中存在的所有由事务完成的修改都将传输到物理数据库。
  2. 将当前页表输出到磁盘。
  3. 当前页表输出到固定位置的磁盘地址,该位置在包含影子页表地址的稳定存储区中。此操作将覆盖旧的影子页表的地址。当前页表与影子页表相同,并且事务已提交。

失败 :
如果系统在事务执行期间但在提交操作之前崩溃,则仅释放已修改的数据库页面并丢弃当前页面表就足够了。在执行事务之前,可通过重新安装影子页表来恢复数据库状态。

如果系统崩溃是在最后一次写操作之后发生的,那么它不会影响事务所做更改的传播。这些更改将保留下来,无需执行重做操作。

好处 :

  • 此方法需要较少的磁盘访问来执行操作。
  • 用这种方法,从崩溃中恢复并不昂贵,而且速度很快。
  • 无需执行诸如“撤消”和“重做”之类的操作。

缺点:

  • 由于更新数据库导致磁盘位置发生变化,因此很难将数据库中的相关页面保持在磁盘附近。
  • 在提交操作期间,影子页面表将指向更改的块,这些影子页面必须返回到空闲块的集合中,否则它们将变为可访问的。
  • 提交单个事务需要多个块,这会降低执行速度。
  • 为了允许该技术同时进行多个交易,这是困难的。