mongodb 系列 ~ journal日志畅谈

摘要:
一简介我们来聊聊Journal日志二核心观点WAL日志先行策略三开启journal流程在开启journal的系统中,写操作从请求到写入磁盘共经历5个步骤,在serverStatus()中已经列出各个步骤消耗的时间。用这个参数确定journalCommitInterval是不是设置的过长。七相关问题1journal本身占据过大的问题推断可能是由于大批量瞬间事务引起的

一 简介 我们来聊聊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本身占据过大的问题
推断 可能是由于大批量瞬间事务引起的

免责声明:文章转载自《mongodb 系列 ~ journal日志畅谈》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇修改客户端连接的服务器IP地址(内部使用)蓝牙的OBEX协议下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于Three.js、Go语言和MongoDB的免费开源的3D场景编辑器简介

ShadowEditor是一个基于Three.js、Go语言和MongoDB的免费开源的3D场景编辑器,支持Windows、Linux和Mac,最新版本是0.5.1。 主要功能 1. 跨平台:支持Windows、Linux和Mac;支持桌面版和Web版。 2. 支持多种3D格式:3ds, 3mf, amf, assimp(anim), awd, ba...

MongoDB Python官方驱动 PyMongo 的简单封装

最近,需要使用 Python 对 MongodB 做一些简单的操作,不想使用各种繁重的框架。出于可重用性的考虑,想对 MongoDB Python 官方驱动 PyMongo 做下简单封装,百度一如既往的未能给我一个满意的结果,于是有了下文。 【正文】 PyMongo,MongoDB Python官方驱动 docs: https://api.mongo...

mongoDB的本地安装学习

一、介绍 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。相比较于MySql,它省去了建表等繁琐的操作,可以实现类似于js的对象操作。 当我们从网上下载某个项目,看到...

MongoDB/备份

mongodump: 在MongoDB中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。./bin/mongodump -h dbhost -d dbname -o yourdirectory./bin/mongodump --host mongodb.example.net --port 27017 --d...

一、CentOS7.4下Elastic Stack 6.2.4日志系统搭建

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据。它通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术。         Logstash是一个开源的用于收集,分析和存储日志的工具。         Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ...

关系数据库和NoSQL结合使用:MySQL + MongoDB

Home Page作者使用一个案例来说明MySQL+MongoDB结合使用,发挥各自所长,并且认为他们互补性很强。当然,这其中不可避免引入DDD中的编程设计模式 Repository仓储模式,通过它能够将数据存储方式和应用分离开来,这样,我们的程序就不受限于任何存储方式,无论是NoSQL或关系数据库。这个案例是一个按效果付费Pay-for-use的分析案例...