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工作流程

  1. write to privateView
  2. prep Log Buffer
  3. Write to Journal
  4. 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()    

      

  

 

posted on   太白金星有点烦  阅读(99)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2020-11-13 0.Mysql优化框架

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示