Dav*_*any 5 postgresql recovery
需要[全页写入],因为操作系统崩溃期间正在进行的页面写入可能仅部分完成,导致磁盘上的页面包含新旧数据的混合。通常存储在 WAL 中的行级更改数据不足以在崩溃后恢复期间完全恢复此类页面。存储整页图像可以保证页面可以正确恢复...
为什么 WAL 日志不足以进行完整恢复?我的理解是它们包含自(至少)最后一个检查点以来的所有页面更新。
有人可以举例说明如何简单地重放上一个检查点的 WAL 日志仍然会导致数据丢失吗?
许多(大多数?)重做记录实际上需要块处于某种合理的状态才能重播到其中。
考虑:
并非所有 WAL 记录都是行级的。假设您读取并重放一条 WAL 记录,其中显示“我根据块碎片整理的通常规则对该块进行了碎片整理”。给定块的正确起始状态,这将是确定性操作,但给定块状态的混合,它不是确定性的,因此不能安全地重放。可能可以枚举哪些 WAL 记录类型属于这种类型,并且只有这些类型才会导致 FPW,但这似乎很脆弱。
如果一个块确实遭受了撕裂的写入,我就不想依赖该块中的所有字节恰好是旧状态或新状态,恰好是两个连续的块。
如果 WAL 无法完全读到最后(人们怎么知道它是否是?),那么可能会有一些块具有“新”数据,而这些数据实际上是“未来”数据,对于不再存在的未来存在。理论上,这种情况永远不会发生,因为 WAL 在块数据释放之前已同步到磁盘。但在崩溃正在演变但尚未显现的纳秒内,谁知道会发生什么?最好是丢失一些据报告已提交的事务,然后完全破坏系统。
归档时间: |
|
查看次数: |
1102 次 |
最近记录: |