数据库采用 Write-Ahead Logging。缓冲池中的某个脏数据页准备写入磁盘时,系统必须先确保()。
WAL 的核心顺序是日志先于对应数据页落盘。若数据页已经包含修改而日志尚未持久化,系统崩溃后就可能缺少重做或撤销该修改所需的可靠记录。
选项分析
错误。索引维护是数据一致性的另一问题,不是 WAL 的定义。
错误。只读事务是否结束与该脏页的 WAL 顺序没有直接关系。
正确。相关日志的持久化是脏页写盘的前置条件。
错误。恢复和归档需要日志,不能在数据页写入前把日志删除。
本题为什么容易错
“日志先写”常被误解成日志文件必须完整写完,或者数据页不能延迟。实际比较的是某条数据修改对应的日志序号与数据页落盘时机。
简短答案
为什么脏数据页落盘前,相关日志必须先持久化,正确答案是 C(描述该页相关修改的日志记录已经按要求持久化)。WAL 的核心顺序是日志先于对应数据页落盘。若数据页已经包含修改而日志尚未持久化,系统崩溃后就可能缺少重做或撤销该修改所需的可靠记录。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 该数据页上的全部记录已经建立索引 | 本题干扰项 | 错误。索引维护是数据一致性的另一问题,不是 WAL 的定义。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 所有只读事务都已结束 | 本题干扰项 | 错误。只读事务是否结束与该脏页的 WAL 顺序没有直接关系。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 描述该页相关修改的日志记录已经按要求持久化 | 本题正确答案 | 正确。相关日志的持久化是脏页写盘的前置条件。 | 看到题干核心场景时优先联想到它 |
| 日志文件已经全部删除以节省空间 | 本题干扰项 | 错误。恢复和归档需要日志,不能在数据页写入前把日志删除。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 该数据页上的全部记录已经建立索引:错误。索引维护是数据一致性的另一问题,不是 WAL 的定义。
- 所有只读事务都已结束:错误。只读事务是否结束与该脏页的 WAL 顺序没有直接关系。
- 日志文件已经全部删除以节省空间:错误。恢复和归档需要日志,不能在数据页写入前把日志删除。
知识点详解
WAL 通常以日志序列号跟踪持久化进度。数据页携带 pageLSN,只有当相应日志已刷到稳定存储,页面才可安全写盘。事务提交时一般先持久化提交记录及此前日志,而数据页可稍后批量刷盘,这也是数据库兼顾持久性和性能的重要基础。检查点可缩小恢复扫描范围,但不能替代写前日志规则。
备考速记
数据可以晚写,日志必须先到。
WAL 在Redo Undo场景中的作用
WAL在本题中的核心价值,是解决“数据库采用 Write-Ahead Logging。缓冲池中的某个脏数据页准备写入磁盘时,系统必须先确保()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 判断日志记录和数据页的正确落盘顺序。
- 根据缓冲策略分析崩溃恢复需要 Redo、Undo 还是二者。
WAL 在数据库系统工程师软考中的考法
软考选择题通常不会只考概念定义,还会把WAL放到Redo Undo场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
可以把日志看成修改数据前留下的可追溯凭证。数据页先落盘、日志却还在内存,一旦断电,磁盘上出现了一个没有可靠来历的变化,恢复程序既不知道该保留还是撤销,也缺少操作依据。所以规则只有一句:要让数据页先走,日志必须已经在磁盘上等它。
考点定位
WAL 约束日志与数据页的落盘顺序,不是要求每次更新都立即把数据页写盘。提交时还要保证事务提交所需日志先持久化。
易错提醒
- 把 WAL 与定期全量备份混为一谈。
- 认为事务提交必须同步刷回全部修改过的数据页。
- 日志还未满足保留条件就截断,破坏恢复链。
备考提示
- 把事务提交日志刷盘和脏页刷盘画成两条时间线。
- 结合 steal/no-steal、force/no-force 理解为什么恢复需要 Undo 或 Redo。
你可能还想了解
- WAL 为什么不要求提交时立刻写全部数据页?
- pageLSN 和日志序列号有什么作用?
- WAL 与 Undo、Redo 日志是什么关系?
本文小结
WAL要求描述修改的日志先持久化,脏数据页才能落盘。这样即使随后崩溃,恢复程序仍有可靠日志判断并执行Redo或Undo;它不要求提交时同步写回全部数据页。