zoukankan      html  css  js  c++  java
  • 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本身占据过大的问题
       推断 可能是由于大批量瞬间事务引起的

  • 相关阅读:
    JavaBasics-15-多线程
    4.10 SpringCloud微服务技术栈
    4.3 Linux操作系统_Unix操作系统
    4.2 互联网项目架构演进
    4.1 微服务框架_引言
    4.6 Redis
    SpringBoot
    docker-dockerfile实战构建文件
    docker 安装私有仓库 registry(离线)
    基础K8S搭建(20209.08亲测成功)
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/11022789.html
Copyright © 2011-2022 走看看