• mongodb 系列 ~ journal日志畅谈


    一 简介 我们来聊聊Journal日志
    二 核心观点 WAL 日志先行策略
    三  开启journal流程
         在开启journal的系统中,写操作从请求到写入磁盘共经历5个步骤,在serverStatus()中已经列出各个步骤消耗的时间。
        1 Write to privateView
        2 prepLogBuffer
        3 WritetoJournal
        4 WritetoDataFile
        5 RemaptoPrivateView
    四  基本概念知识
       1 shared view
          数据文件映射到一块内存区域,称为shared view,数据会直接写入(在不开启journal的情况下) 系统每60s刷新这块内存到磁盘.如果系统断电,就会丢失这60S的未持久化的数据
       2 private view
          系统会再映射一块内存区域供journal使用,称之为private view,mongodb默认每100ms刷新privateView到journal(在开启journal情况下) 如果系统断电.会容忍这100ms的数据丢失,当服务重启时,会利用journal进行恢复
       3 mongo的journal和mysql的redo效果一样,日志先行.但是有一点不同的是,mongo的journal的功能是可以关闭的
    五  系统相关
       1 当单个文件达到1GB的时候,就会创建一个新的文件,旧文件不会循环使用,自动删除
       2 文件构成
        1 lsn代表最后使用的journal序列号
        2 prealloc 代表已经分配但是还没有使用的文件
       3 j.*代表的是正在使用的journal文件
    六  系统命令
       1 journal延迟测试的函数,
          db.runCommand("journalLatencyTest"):
      2 启动
         journal = true
      3 查看journal运行状态
         db.serverstatus() dur相关,具体请自行查看
         commitsInWriteLock:在有写锁的情况下提交的数量,这表示写的压力很大
         earlyCommits:表示在journalCommitInterval之前的时间,mongod请求提交的次数。用这个参数确定journalCommitInterval是不是设置的过长。
     4 journalCommitInterval 
         默认100ms,根据上述的监控指标可以进行结合判断是否要进行调整。
    七  相关问题
    1 journal本身占据过大的问题
       推断 可能是由于大批量瞬间事务引起的

  • 相关阅读:
    如何制作动态层分组报表
    填报表之数据留痕
    填报表中也可以添加 html 事件
    填报脚本之轻松搞定复杂表的数据入库
    在报表中录入数据时如何实现行列转换
    如何在报表中绘制 SVG 统计图
    如何用报表工具实现树状层级结构的填报表
    6.JAVA_SE复习(集合)
    JAVA_SE复习(多线程)
    数据库基本概念
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/11022789.html
Copyright © 2020-2023  润新知