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

Steal加No-Force为什么可能既要Undo又要Redo?

中级 单选题 第 1140 题 较难 数据库系统工程师StealNo-ForceUndoRedoWAL
题目

数据库缓冲区采用 Steal + No-Force 策略,并使用预写日志。系统崩溃后,恢复机制通常需要()。

A 只做Undo,因为所有已提交更新都已写入数据页
B 只做Redo,因为未提交更新绝不会写入数据页
C 既可能做Undo,也可能做Redo
D 既不做Undo,也不做Redo
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

Steal允许缓冲区把尚未提交事务修改过的脏页写回磁盘,崩溃后要撤销这些未提交结果,因此需要Undo。No-Force表示事务提交时不强制把它修改的全部数据页立刻写盘,已提交结果可能只在日志中,崩溃后要Redo。两种策略放在一起,就可能既撤销未提交更新,又重做已提交但未落盘的更新。

选项分析

A

错误。No-Force恰恰不保证提交时全部数据页已经写盘。

B

错误。Steal允许未提交事务的脏页先被写回,可能需要撤销。

C

正确。Steal带来Undo可能,No-Force带来Redo可能。

D

错误。只有在更严格的页面写入约束下,才可能减少其中某类恢复工作。

本题为什么容易错

最常见的错法是把Steal理解成“偷走日志”,或把Force理解成“强制提交”。这两个词讨论的是缓冲页什么时候能写磁盘,不是在定义事务是否允许提交。

先看结论

简短答案

Steal加No-Force为什么可能既要Undo又要Redo,正确答案是 C(既可能做Undo,也可能做Redo)。Steal允许缓冲区把尚未提交事务修改过的脏页写回磁盘,崩溃后要撤销这些未提交结果,因此需要Undo。No-Force表示事务提交时不强制把它修改的全部数据页立刻写盘,已提交结果可能只在日志中,崩溃后要Redo。两种策略放在一起,就可能既撤销未提交更新,又重做已提交但未落盘的更新。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
只做Undo,因为所有已提交更新都已写入数据页 本题干扰项 错误。No-Force恰恰不保证提交时全部数据页已经写盘。 看到该词不要急着选,先判断是否真正解决题干问题
只做Redo,因为未提交更新绝不会写入数据页 本题干扰项 错误。Steal允许未提交事务的脏页先被写回,可能需要撤销。 看到该词不要急着选,先判断是否真正解决题干问题
既可能做Undo,也可能做Redo 本题正确答案 正确。Steal带来Undo可能,No-Force带来Redo可能。 看到题干核心场景时优先联想到它
既不做Undo,也不做Redo 本题干扰项 错误。只有在更严格的页面写入约束下,才可能减少其中某类恢复工作。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 只做Undo,因为所有已提交更新都已写入数据页:错误。No-Force恰恰不保证提交时全部数据页已经写盘。
  • 只做Redo,因为未提交更新绝不会写入数据页:错误。Steal允许未提交事务的脏页先被写回,可能需要撤销。
  • 既不做Undo,也不做Redo:错误。只有在更严格的页面写入约束下,才可能减少其中某类恢复工作。
复习

知识点详解

WAL要求修改过的数据页写入持久存储前,对应日志先持久化。这样Steal写出未提交页面后仍能按日志撤销;No-Force让提交路径不必同步刷完所有数据页,崩溃后则可从日志重放提交结果。

备考速记

Steal怕脏错写出,要Undo;No-Force怕好结果没写出,要Redo。

Steal 在WAL场景中的作用

Steal + No-Force兼顾缓冲区周转和提交性能,是常见高性能设计思路,但恢复管理也更复杂。监控不能只盯提交延迟,还应关注日志刷盘、检查点与恢复时间目标。

拓展

同类题怎么考

  • 根据缓冲区策略判断恢复需要Undo还是Redo。
  • 解释预写日志为什么允许提交时不强制写完全部数据页。
Steal 在数据库系统工程师软考中的考法

把题目拆成两个独立是非题,不要凭四个名词的长短猜答案。只要记住页面写盘时机,Undo和Redo会自然推出。

解题思路

别把四个英文词混成一团。先问未提交结果会不会进磁盘:Steal说会,所以要Undo;再问提交结果是否保证进磁盘:No-Force说不保证,所以要Redo。答案是C。

考点定位

Steal回答“未提交脏页能不能先写盘”,Force回答“提交时数据页必须不必须写盘”。前者决定Undo需求,后者决定Redo需求。

易错提醒

  • 把No-Steal与No-Force看成同一条规则。
  • 忘记WAL要求相关日志先于数据页落盘。
  • 认为提交日志落盘等于所有数据页也已落盘。

备考提示

  • 画两张小图:未提交事务脏页、已提交事务脏页,各问一次能否留在磁盘或内存。
  • 做组合题先写Steal→Undo、No-Force→Redo,再看选项。

你可能还想了解

  • Steal为什么需要Undo?
  • No-Force为什么需要Redo?
  • Steal加No-Force崩溃后怎么恢复?

本文小结

Steal允许未提交脏页写盘,因此可能需要Undo;No-Force不保证提交时数据页已落盘,因此可能需要Redo。