当前位置:首页 >百科 >MongoDB数据库性能监控看这一篇就够了 据库监控实现快速入门

MongoDB数据库性能监控看这一篇就够了 据库监控实现快速入门

2024-06-28 21:47:23 [百科] 来源:避面尹邢网

MongoDB数据库性能监控看这一篇就够了

作者:哪吒 数据库 MongoDB 让我们一起,据库监控一探究竟,看篇继续学习MongoDB数据库性能监控,据库监控实现快速入门,看篇丰富个人简历,据库监控提高面试level,看篇给自己增加一点谈资,据库监控秒变面试小达人,看篇BAT不是据库监控梦。

最近项目在使用MongoDB作为图片和文档的存储数据库,为啥不直接存MySQL里,据库监控还要搭个MongoDB集群,看篇麻不麻烦?

MongoDB数据库性能监控看这一篇就够了 据库监控实现快速入门


MongoDB数据库性能监控看这一篇就够了 据库监控实现快速入门

让我们一起,据库监控一探究竟,看篇继续学习MongoDB数据库性能监控,据库监控实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。

MongoDB数据库性能监控看这一篇就够了 据库监控实现快速入门

一、MongoDB启动慢​

1、启动日常卡住

根本不用为了截屏而快速操作,MongoDB启动真的超级慢。

图片

图片

2、启动MongoDB配置服务器,间歇性失败

图片

图片

3、查看MongoDB日志,分析“MongoDB启动慢”的原因

图片

4、耗时“一小时”,MongoDB启动成功!

图片

二、原因分析

在MongoDB关闭之前,有较大的索引建立的操作没有完成,MongoDB就直接shutdown了,等MongoDB再次启动的时候,MongoDB默认会将这个index重建好,重建期间处于startup状态。

由于不清楚重建索引需要多久,因此可以通过重启mongod时加上–noIndexBuildRetry参数来跳过索引重建。等启动完成后,再创建这个索引。

下面从几方面,监控一下MongoDB的性能问题。

三、MongoDB内存使用

图片

  • 常驻内存:常驻内存是MongoDB在RAM中显式拥有的内存。如果查询一个集合数据,MongoDB会将其放入常驻内存中,MongoDB会获得其地址,这个地址不是RAM中数据的真实地址,而是一个虚拟地址。MongoDB可以将它传递给内核,内核会查找出数据的真实位置。如果内核需要从内存中清理缓存,MongoDB仍然可以通过该地址对其进行访问。MongoDB会向内核请求内存,然后内核会查看数据缓存,如果发现数据不存在,就会产生缺页错误并将数据复制到内存中,最后再返给MongoDB。
  • 虚拟内存:操作系统提供的一种抽象,它对软件进程隐藏了物理存储的细节。每个进程都可以看到一个连续的内存地址空间。在Ops Manager中,MongoDB的虚拟内存是映射内存的两倍。
  • 映射内存:包含MongoDB曾经访问过的所有数据。

四、MongoDB磁盘空间​

当磁盘空间不足时,可以进行如下操作:

  1. 可以添加一个分片;
  2. 删除未使用的索引;
  3. 可以执行压缩操作;
  4. 关闭副本集成员,将其数据复制到更大的磁盘中挂载;
  5. 用较大驱动器的成员替换副本集中的成员;

五、常用命令

1、MongoDB获取系统信息

db.hostInfo()

图片

2、MongoDB获取系统内存情况

db.serverStatus().mem

图片

3、MongoDB获取连接数信息

db.serverStatus().connections

图片

4、MongoDB获取全局锁信息

db.serverStatus().globalLock

图片

5、MongoDB获取操作统计计数器

db.serverStatus().opcounters

图片

6、MongoDB获取数据库状态信息

db.stats()

图片

以上是MongoDB的重要指标,通过这些指标我们可以了解到MongoDB的运行状态,评估数据库的健康程度,并快速确定实际项目中遇到的性能瓶颈。

比如项目中遇到的Timeout异常:

com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message
at com.mongodb.connection.InternalStreamConnection.translateReadException(InternalStreamConnection.java:475)
at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:226)
at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.java:105)
at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.java:438)
at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:112)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289)
at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:176)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:216)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:207)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:113)
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:488)
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:1)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:241)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:214)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:483)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:1)
at com.mongodb.Mongo.execute(Mongo.java:818)

六、MongoDB持久性

1、复制延迟

复制延迟是指从节点无法跟上主节点的速度。

从节点一个操作的时间减去主节点此操作的时间,就是复制延迟。延迟应该尽可能的接近0,并且通常是毫秒级的。

2、备份

备份操作通常会将所有数据读入内存,因此,备份操作通常应该在副本集从节点而不是主节点进行,如果是单机MongoDB,则应该在空间时间进行备份,比如深夜凌晨。

3、持久性

持久性是数据库必备的一种特性,想象一下,如果数据库不具备持久性,如果数据库重启,数据全部丢失,太可怕了,不敢想。

为了在服务器发生故障时提供持久性,MongoDB使用预写式日志机制,英文简称 WAL。WAL是数据库系统中一种常见的持久性技术。在数据存入数据库之前,将这些更改操作写到磁盘上。

从MongoDB4.0开始,执行写操作时,MongoDB会使用与oplog相同的格式创建日志。oplog语句具有幂等性,不管执行多少次,结果都是一样的。

MongoDB还维护了日志和数据库数据文件的内存视图。默认情况,每50毫秒会将日志条目刷新到磁盘上,每60秒会将数据库文件刷新到磁盘上。刷新数据的时间60秒间隔被称为检查点。日志用于将上一个检查点之后的数据提供持久性。MongoDB的持久性就是在发生故障时,重启之后,将日志中的语句重新执行一遍,以保证在关闭前丢失的数据重新刷新到MongoDB中。

MongoDB会在data目录下创建一个journal的子目录,WiredTiger日志文件的名称为WiredTigerLog.<sequence>。sequence是一个从0 000 000 001开始的数字。

图片

MongoDB会对写入的日志进行压缩,日志文件限制的最大大小为100MB。如果大于100MB,MongoDB就会自动创建一个新的日志文件,由于日志文件只需在上次检查点之后恢复数据,因此在新的检查点写入完成时,旧的日志文件就会被删除。

本文转载自微信公众号「哪吒编程」,可以通过以下二维码关注。转载本文请联系哪吒编程公众号。


责任编辑:姜华 来源: 哪吒编程 MongoDB数据库

(责任编辑:娱乐)

    推荐文章
    • 信用购怎么变回花呗 操作流程来啦

      信用购怎么变回花呗 操作流程来啦有不少支付宝用户同意花呗服务升级后,发现花呗页面变成了“花呗|信用购”,在原来花呗的基础上还多了一个信用购消费贷款产品,虽说可以和花呗单独使用,可也有的人认为用不着,想知道信用 ...[详细]
    • 《星露谷物语》1.6版部分内容透露 主要支持MOD开发

      《星露谷物语》1.6版部分内容透露 主要支持MOD开发牧场经营名作《星露谷物语》官方开发者ConcernedApe于4月17日今天,透露了即将上线的1.6版更新部分内容,主要成为MOD支持版本等等,一起了解下。·《星露谷物语Stardew Valley) ...[详细]
    • 《CS:GO》史上第二大交易诞生 金额高达50万美元

      《CS:GO》史上第二大交易诞生 金额高达50万美元近日推特网友zipelCS发推文称,他完成了《CS:GO》史上的第二大交易,金额高达50万美元(约合人民币343.8万元)!zipelCS表示他帮网友Luksusbums代售了两件饰品——“AK-47 ...[详细]
    • 苹果WWDC 2022官宣:iOS 16要来了

      苹果WWDC 2022官宣:iOS 16要来了4月6日凌晨消息,苹果正式宣布,将于6月6日至10日通过线上形式举行年度全球开发者大会WWDC),供所有开发者免费参加。参考之前的开发者大会,本次WWDC将展示全新iOS、iPadOS、macOS等系 ...[详细]
    • 王子新材(002735.SZ)拟收购中电华瑞49%股权 2月25日起复牌

      王子新材(002735.SZ)拟收购中电华瑞49%股权 2月25日起复牌王子新材(002735.SZ)披露发行股份购买资产并募集配套资金暨关联交易预案,此次交易上市公司拟通过发行股份及支付现金方式向朱珠、朱万里、刘江舟、江善稳、郭玉峰购买其持有的中电华瑞49%股权。此次交 ...[详细]
    • Redmi Note12用上天玑8000了!

      Redmi Note12用上天玑8000了!按照卢伟冰在发布Redmi Note11系列时候的说法,Redmi Note系列今后将会采取一年两款产品的策略,一款主打性能小钢炮,另一款主打时尚和外观设计,算算时间,也差不多快要到Note12发布的 ...[详细]
    • 卡普空公布《原始袭变》正式版内容情报

      卡普空公布《原始袭变》正式版内容情报《原始袭变》已经在3月17日至19日进行了公开测试,卡普空现在公布了这款游戏将在发行后进行的内容更新。公开测试提供了以“恐龙生存”模式为主的一系列任务,当然完整游戏还有以下内容为特色:更多游戏方式●不 ...[详细]
    • 任天堂官网公开《塞尔达传说:王国之泪》更多视频

      任天堂官网公开《塞尔达传说:王国之泪》更多视频昨天晚上,任天堂公开了《塞尔达传说:王国之泪》发售之前的最终宣传片,视频包含大量故事、战斗和新的游戏机制演示,让期待游戏的粉丝急不可耐。随后,在日本任天堂官方网站公开了更多的游玩片段,以下为合集,请欣 ...[详细]
    • 美联储加息什么意思 美联储加息对中国股市的影响有哪些?

      美联储加息什么意思 美联储加息对中国股市的影响有哪些?美联储加息什么意思?美联储加息是指联邦储备系统管理委员会在华盛顿召开议息会议后,决定货币政策的调整,是否上调利率。简单的说,加息是一种紧缩型货币政策,美联储通过加息来应对当前的经济。一般加息可以提高银 ...[详细]
    • “期货”玩法,英特尔也学会了

      “期货”玩法,英特尔也学会了【核心观点】英特尔没有直接承认或回应任何质疑,而将这些问题抛给了Yuneec。而Yuneec的品牌并不广为人知,他们借助解释这些问题的,摇身一变以大疆的有力竞争者自居。这是一个双赢的策略。前不久,著名 ...[详细]
    热点阅读