数据库恢复中 Steal/No-Steal 和 Force/No-Force 策略的区别

问题描述 投票:0回答:2

据说No-Steal策略是指事务更新的缓冲块在事务提交之前不会写入磁盘,No-Force策略有类似的定义。

它们有什么区别?

recovery
2个回答
67
投票

假设事务 T1 想要读取数据对象 X,但工作内存已被所有其他事务的工作填满。因此,T1 需要清除一些内存,这是通过将工作内存中的其他一些页面踢到稳定存储来实现的。这可能很危险,因为我们无法确定 T1 推动稳定存储的内容是否已提交。这就是所谓的偷窃。

强制意味着每次事务提交时,所有受影响的页面都会被推送到稳定存储。这是低效的,因为每个页面可能被许多事务写入并且会减慢系统速度。

大多数崩溃恢复使用窃取/不强制方法,接受将可能未提交的数据写入内存的风险,以获得不将所有提交效果强制写入内存的速度。


0
投票

它们可能看起来相似,但并不相同。

看这个图:

交易的缓冲块...

  • 窃取:一旦启动即可移入磁盘。
  • No-Steal: 无法移入磁盘,直到提交为止。
  • 强制:应在提交之前移入磁盘。
  • 无强制:即使在提交之后也可以移入磁盘。

要点:

  • Steal / Force 用于立即数据库修改(IDM)方法
  • Steal / No-Force 广泛用于大多数系统(IDM 中也使用)。
  • No-Steal / Force 的性能最差。
  • No-Steal / No-Force 用于延迟数据库修改(DDM)方法。
© www.soinside.com 2019 - 2024. All rights reserved.