InnoDB引擎中的redo为何不能处理页断裂的问题?

Mysql数据库问题,InnoDB技术内幕这本书说道redolog是物理的,且幂等。那为何不能处理页断裂的问题,也就是16K的页我只写了4k后发生了停…
关注者
20
被浏览
4,507

3 个回答

姜总书里面应该特地说过redo是物理逻辑结合型的日志。物理到具体的哪个page,页里面是逻辑的。有个考虑就是权衡日志量。既然是逻辑的,那就要根据日志中的条件找到对应的记录。如果页的内部组织结构被破坏了,也就无法找到符合条件的记录了。

幂等主要是每页的元数据信息记录了最新应用的redo lsn。通过判断lsn就可以决定一条redo是否需要再次回放了

因为redo是逻辑日志,只有磁盘上的page是正确的,

才可以基于这个正确的page和redo,恢复出内存中的page


双写机制可以保证磁盘上的page都是正确的(通过双写恢复处理)

PG没有采用双写,而是在每个checkpoint后,page第一次被修改时,将page原值全部写入redo log。这样恢复时,磁盘中page发生断裂时,可以采用redo log中的正确page。


判断一个page是否正确,通过page头的checksum字段。