数据库缓冲区采用 Steal + No-Force 策略,并使用预写日志。系统崩溃后,恢复机制通常需要()。
Steal允许缓冲区把尚未提交事务修改过的脏页写回磁盘,崩溃后要撤销这些未提交结果,因此需要Undo。No-Force表示事务提交时不强制把它修改的全部数据页立刻写盘,已提交结果可能只在日志中,崩溃后要Redo。两种策略放在一起,就可能既撤销未提交更新,又重做已提交但未落盘的更新。
选项分析
错误。No-Force恰恰不保证提交时全部数据页已经写盘。
错误。Steal允许未提交事务的脏页先被写回,可能需要撤销。
正确。Steal带来Undo可能,No-Force带来Redo可能。
错误。只有在更严格的页面写入约束下,才可能减少其中某类恢复工作。
本题为什么容易错
最常见的错法是把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。