面试题答案
一键面试基于ACID持久性原则的恢复机制
- ACID持久性原则:持久性确保一旦事务提交,对数据库的修改就永久保存,即使发生系统崩溃、介质故障等情况。
- 日志机制
- 作用:日志记录了数据库的所有修改操作。在系统崩溃后,通过重放日志中的已提交事务的记录,可以将数据库恢复到崩溃前已提交事务的状态。同时,日志还用于撤销未提交事务的修改,以保证事务的原子性。例如,在银行转账事务中,日志会记录从账户A扣除金额和向账户B添加金额的操作。
- 类型:常见的有撤销日志(Undo Log)和重做日志(Redo Log)。撤销日志用于回滚未提交事务,重做日志用于重做已提交事务。
- 检查点机制
- 作用:定期将内存中已提交的数据修改刷新到磁盘,减少恢复时需要扫描日志的范围。检查点记录了在某一时刻所有已提交事务的状态。当系统崩溃后,只需从最近的检查点开始扫描日志,而不必从日志开头扫描,大大缩短了恢复时间。例如,若每10分钟设置一个检查点,系统崩溃后只需处理最近10分钟内的日志记录。
- 操作:在检查点时刻,数据库系统会将所有已提交事务对应的缓冲区数据写入磁盘,并在日志中记录检查点信息。
- 关键技术的相互关系
- 日志机制是数据库恢复的基础,记录了所有数据库修改操作,为恢复提供数据依据。
- 检查点机制依赖于日志机制,检查点信息也记录在日志中。它通过定期刷新数据到磁盘,优化了基于日志的恢复过程,减少恢复时间。在恢复时,先根据检查点确定恢复起点,然后利用日志进行重做和撤销操作,从而使数据库恢复到事务提交后的正确状态。