面试题答案
一键面试- WAL模式简介:
- 在SQLite的WAL(Write - Ahead Logging)模式下,写操作不会直接修改数据库文件,而是将修改记录写入到一个WAL日志文件中。
- 崩溃恢复机制:
- 检查点机制:
- SQLite会定期或在特定条件下执行检查点操作。检查点操作会将WAL日志中已提交的修改合并到数据库文件中,并截断WAL日志。
- 在系统崩溃前,最近一次检查点操作之后的WAL日志记录了尚未合并到数据库文件的修改。
- 崩溃恢复步骤:
- 重新打开数据库:当系统从崩溃中恢复并重新打开数据库时,SQLite会首先定位到WAL日志文件。
- 分析WAL日志:
- SQLite会扫描WAL日志,识别出所有已提交的事务记录。每个事务在WAL日志中有其特定的标记和记录格式。
- 对于已提交的事务,SQLite会按照日志记录中的操作顺序,重新应用这些修改到数据库文件中。例如,如果日志记录了对某张表中某条记录的更新操作,SQLite会执行该更新,将数据库文件恢复到崩溃前已提交事务结束时的状态。
- 清理WAL日志:
- 在成功将所有已提交事务的修改应用到数据库文件后,SQLite会截断WAL日志,丢弃那些已经重新应用的日志记录,使得WAL日志回到一个初始的干净状态,为后续的写操作做好准备。
- 处理未提交事务:
- WAL日志中未提交的事务记录会被忽略。因为这些事务在崩溃前没有完成提交,其修改不应该被持久化到数据库中,从而保证了数据的一致性,只保留崩溃前已提交的正确数据状态。
- 检查点机制: