对于单个数据库操作,它可能会影响多个页面。例如,插入操作可能会导致页面拆分。结果,由于不一致的考虑,数据库不会使用逻辑日志进行重做操作(操作会影响两个页面,当系统崩溃时,只有一个页面被冲入数据中)。他们始终使用生理日志或物理日志进行重做操作。但是在白羊座算法或某些数据库(例如MySQL)中,它们使用逻辑日志进行撤消,这可能会影响多个页面。他们为什么可以这样做?当只有受撤消操作影响的某些页面被冲入磁盘而系统再次崩溃时,它们如何保证回滚正确性?
aries也记录了恢复操作,因此恢复过程中崩溃的问题(您的最后一个问题)与撤消逻辑记录的问题正交。操作可能会影响多个页面的事实并不会固有地引起一致性问题。
我认为您也可以使用逻辑日志进行重做("在原始Aries Paper中可以从逻辑上执行重做和撤消操作),但是物理上最大的优势是它是愿意的。撤消协议确保操作不会超过一次。
逻辑日志有一些优点(与物理日志相比):
- 保存空间
- "能够执行逻辑启动可以支持更高级别的并发性"