据说No-Steal策略是指事务更新的缓冲块在事务提交之前不会写入磁盘,No-Force策略有类似的定义。
它们有什么区别?
假设事务 T1 想要读取数据对象 X,但工作内存已被所有其他事务的工作填满。因此,T1 需要清除一些内存,这是通过将工作内存中的其他一些页面踢到稳定存储来实现的。这可能很危险,因为我们无法确定 T1 推动稳定存储的内容是否已提交。这就是所谓的偷窃。
强制意味着每次事务提交时,所有受影响的页面都会被推送到稳定存储。这是低效的,因为每个页面可能被许多事务写入并且会减慢系统速度。
大多数崩溃恢复使用窃取/不强制方法,接受将可能未提交的数据写入内存的风险,以获得不将所有提交效果强制写入内存的速度。