面试题答案
一键面试日志产生
- 操作记录:
- 当MongoDB执行写操作(如插入、更新、删除等)时,这些操作会首先记录到内存中的日志缓存(Journal Buffer)中。
- 作用:在内存中暂存日志信息,避免每次写操作都直接持久化,减少磁盘I/O开销,提高系统性能。
日志刷盘(从日志缓存到日志文件)
- 定期刷盘:
- MongoDB有一个默认的日志刷盘频率,通常是每100毫秒(可配置)。当达到这个时间间隔时,日志缓存中的内容会被刷写到磁盘上的事务日志文件(Journal Files)中。
- 作用:保证即使系统崩溃,在崩溃前100毫秒内的操作日志也能被持久化,最大限度减少数据丢失。
- 日志满刷盘:
- 当日志缓存达到一定的大小(通常是大约16MB,可配置)时,也会触发刷盘操作,将日志缓存中的内容写入事务日志文件。
- 作用:避免日志缓存无限增长,保证内存使用的稳定性,同时及时持久化日志以确保数据安全。
日志文件管理
- 日志文件滚动:
- 事务日志文件大小是有限制的(默认约100MB,可配置)。当当前的事务日志文件写满时,MongoDB会滚动到下一个事务日志文件继续写入。
- 作用:便于管理和维护日志文件,防止单个日志文件过大,同时也有利于在恢复过程中按顺序处理日志。
- 日志文件保留:
- MongoDB会保留一定数量的事务日志文件(默认保留7个)。这些保留的日志文件在系统崩溃恢复或副本集同步等场景中发挥作用。
- 作用:用于崩溃恢复时重放日志以恢复到崩溃前的状态,以及副本集成员之间通过应用日志来保持数据同步。
最终持久化存储(从日志文件到数据文件)
- 检查点(Checkpoint):
- MongoDB定期(默认每60秒,可配置)创建检查点。在检查点过程中,会将内存中修改的数据(驻留在内存中的数据页,即WiredTiger引擎的缓存)刷新到磁盘上的数据文件(Data Files)。
- 作用:将日志中记录的修改最终落实到数据文件,确保数据的持久化存储,同时检查点标记了一个时间点,在崩溃恢复时,只需从检查点之后的日志开始重放,减少恢复时间。
- 日志重放(Recovery):
- 在系统启动时,如果检测到崩溃或异常关闭,MongoDB会重放检查点之后的事务日志,将未持久化到数据文件的操作重新应用。
- 作用:确保系统能够恢复到崩溃前的状态,保证数据的一致性和完整性。