数据库系统工程师 · 高频练习

为什么脏数据页落盘前,相关日志必须先持久化?

中级 单选题 第 919 题 中等 数据库系统工程师WAL写前日志崩溃恢复Redo Undo
题目

数据库采用 Write-Ahead Logging。缓冲池中的某个脏数据页准备写入磁盘时,系统必须先确保()。

A 该数据页上的全部记录已经建立索引
B 所有只读事务都已结束
C 描述该页相关修改的日志记录已经按要求持久化
D 日志文件已经全部删除以节省空间
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

WAL 的核心顺序是日志先于对应数据页落盘。若数据页已经包含修改而日志尚未持久化,系统崩溃后就可能缺少重做或撤销该修改所需的可靠记录。

选项分析

A

错误。索引维护是数据一致性的另一问题,不是 WAL 的定义。

B

错误。只读事务是否结束与该脏页的 WAL 顺序没有直接关系。

C

正确。相关日志的持久化是脏页写盘的前置条件。

D

错误。恢复和归档需要日志,不能在数据页写入前把日志删除。

本题为什么容易错

“日志先写”常被误解成日志文件必须完整写完,或者数据页不能延迟。实际比较的是某条数据修改对应的日志序号与数据页落盘时机。

先看结论

简短答案

为什么脏数据页落盘前,相关日志必须先持久化,正确答案是 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;它不要求提交时同步写回全部数据页。