16.journal log
Journal log
- journal是MongoDB存储引擎层的概念,monogb主要支持的存储引擎有wiredtiger、mongorocks 、mmapv1等,它们都支持配置joulnal
- MongDB所有的数据写入、读取最终都是通过调用存储引擎层的接口来存储、读取数据,journal是存储引擎存储数据的一种辅助机制
- 以wiredtiger为例,如果不配置journal,写入wiredtiger的数据,并不会立即持久化存储,而是每分钟会做一次全量的checkpoint(storage.syncPeriodSecs配置项,默认1分钟),将所有的数据持久化。如果中间出现宕机,那么数据只能恢复到最近一次checkpoint,这样最多丢失1分钟的数据
- 建议一定要开启journal,开启后,每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。这样即使出现宕机,启动时Wiredtiger会先将数据恢复到最近一次checkpoint的点,然后重放后续的journal操作日志来恢复数据。
- Mongodb里的journal行为主要有2个参数控制,storage.journal.enabled决定是否开启journal,storage.journal.commitInternalMs 决定journal刷盘的间隔,默认为100ms,用户也可以通过写入时指定writeConcern为{j:true}来每次写入时都确保journal刷盘。
- Journal 文件文件最大被允许为100MB,一旦超过这个大小,wiredTiger 会创建一个新的journal 文件,wiredTiger会自动移除旧的joural log文件,以维护从上一个检查点恢复所需的文件。
- 预分配,wiredTiger会预先分配一个journal files
Journal log恢复过程
- 查看数据文件找到上次checkpoint是的标识符(lsn)
- 在journal日志文件中搜索与最后一次检查点标识符相匹配的记录
- 应用这些日志记录
Journal log工作流程
- write to privateView
- prep Log Buffer
- Write to Journal
- Remap to PrivateView
share view:数据文件映射到一块内存区域,称为shared view,数据会直接写入(在不开启journal情况下)系统每60s刷新这块内存区域,如果系统断电,就会丢失这60s的未持久化的数据。
private view:系统会再映射一块内存区域工journal使用,称为private view,mongodb默认是100ms刷新private view到journal(在开启journal情况下),如果系统断电,会容忍这100ms的数据丢失,当服务重启时,会利用journal 进行恢复。
查看journal状态:
db.serverStatus()
分类:
Mongdb基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-11-13 0.Mysql优化框架