您当前的位置:首页 > 电脑百科 > 数据库 > 百科

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

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

 

 

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

 

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

一、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()
  • 1.

 

 

图片

 

2、MongoDB获取系统内存情况

 

db.serverStatus().mem
  • 1.

 

 

图片

 

3、MongoDB获取连接数信息

 

db.serverStatus().connections
  • 1.

 

 

图片

 

4、MongoDB获取全局锁信息

 

db.serverStatus().globalLock
  • 1.

 

 

图片

 

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

 

db.serverStatus().opcounters
  • 1.

 

 

图片

 

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

 

db.stats()
  • 1.

 

 

图片

 

以上是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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

 

六、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就会自动创建一个新的日志文件,由于日志文件只需在上次检查点之后恢复数据,因此在新的检查点写入完成时,旧的日志文件就会被删除。

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



Tags:MongoDB   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
让我们一起,一探究竟,继续学习MongoDB数据库性能监控,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。 最近项目在使用MongoDB作为图片和...【详细内容】
2023-02-16  Tags: MongoDB  点击:(3)  评论:(0)  加入收藏
最近我在做一个新项目,由于我们项目组一直使用的是 MongoDB 数据库,所以新项目我就打算上 Spring Data MongoDB 尝试一下,虽然我早就用过了 Spring Data JPA,对 Spring Data 的...【详细内容】
2022-11-22  Tags: MongoDB  点击:(49)  评论:(0)  加入收藏
速览正如发布MongoDB 5.0时承诺的更快发布频率,年度大版本MongoDB 6.0也于2022年正式跟广大数据库爱好者们见面了。目前阿里云MongoDB已经完成了对6.0版本的适配工作,大家可以...【详细内容】
2022-11-09  Tags: MongoDB  点击:(246)  评论:(0)  加入收藏
-------------------MongoDB数据导入与导出-------------------1、导出工具:mongoexport1、概念: mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV...【详细内容】
2022-08-22  Tags: MongoDB  点击:(377)  评论:(0)  加入收藏
一、问题 在好大夫在线内部,S3系统负责各业务方操作日志的集中存储、查询和管理。目前,该系统日均查询量数千万次,插入量数十万次。随着日志量的不断累积,主表已经达到数十亿,单...【详细内容】
2022-07-05  Tags: MongoDB  点击:(118)  评论:(0)  加入收藏
GridFS是用于存储和检索超过16 MB大小限制的BSON文档文件的规范。注意GridFS 不支持多文档事务相较于将一个文件存储在单条文档中,GridFS将文件分为多个部分或块[1],并将每个...【详细内容】
2022-04-14  Tags: MongoDB  点击:(231)  评论:(0)  加入收藏
MongoDB 简介MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它的最大特点是:&bull;特别适合存储大量的无结...【详细内容】
2021-06-25  Tags: MongoDB  点击:(277)  评论:(0)  加入收藏
什么是MongoDB?mongodb是一个基于分布式文件储存的数据库,由C++编写。是一个文档型数据库,提供好的性能,领先的非关系型数据库MongoDB的储存形式类似于python的字典,以{&lsquo;...【详细内容】
2021-03-05  Tags: MongoDB  点击:(177)  评论:(0)  加入收藏
一、NoSQL的简介NoSQL比关系型数据库性能高数倍。NoSQL凭借 “易扩展、大数据、高可用、高性能、灵活性”特点强势引领全场。CP型分布式数据库,能够保证数据的强一致性和分区...【详细内容】
2021-02-25  Tags: MongoDB  点击:(758)  评论:(0)  加入收藏
我加入 MongoDB 还不到一年,但学到了很多东西。在面试这家公司前,我从未真正使用过 MongoDB,尽管我听过一些有关它的演讲,并且它的简单易用给我留下深刻印象。...【详细内容】
2021-01-26  Tags: MongoDB  点击:(341)  评论:(0)  加入收藏
▌简易百科推荐
让我们一起,一探究竟,继续学习MongoDB数据库性能监控,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。 最近项目在使用MongoDB作为图片和...【详细内容】
2023-02-16  哪吒  51CTO  Tags:MongoDB   点击:(3)  评论:(0)  加入收藏
PG数据库遇到内存问题要立即进行分析的场景并不多,因为大多数PG数据库的内存使用率过高的报警并不意味着内存使用情况异常,内存真的不够用了。因为PG数据库是使用DOUBLE BUFF...【详细内容】
2023-02-10  白鳝  51CTO  Tags:数据库   点击:(8)  评论:(0)  加入收藏
管理工具对于我们来说就非常的有必要,今天要介绍的这款工具从名字就能看出来它对于自己是多的自信,它就是 JSON Hero。对于前后端信息交互来说,目前 JSON 格式几乎成为了大家约...【详细内容】
2023-02-09  梦回丶故里  51CTO  Tags:Json   点击:(8)  评论:(0)  加入收藏
一、优缺点ActiveMQ官网地址:http://activemq.apache.org/官网介绍Apache ActiveMQ是最流行的开源、多协议、基于Java的消息代理。它支持行业标准协议,因此用户可以从多种语...【详细内容】
2023-02-02  王振军  51CTO  Tags:MQ   点击:(11)  评论:(0)  加入收藏
正如我在几次演讲中所说,改进系统的最好方法是首先不要做“愚蠢的事情”。我并不是说你或你的开发人员是“愚蠢的”,很容易忽视这些类型的决策的含义,而没有意识到它们对可维护...【详细内容】
2023-01-29    revsys.  Tags:数据库   点击:(14)  评论:(0)  加入收藏
在实际开发中,可能会遇到数据库多条数据重复了,此时我们需要删除重复数据,只保留一条有效数据,用SQL语句怎么实现呢,下面我们模拟一下:1.准备重复数据: 2.过滤出存在重复数据的信...【详细内容】
2023-01-13  字词易查小程序  今日头条  Tags:SQL语句   点击:(4)  评论:(0)  加入收藏
作者 | 陈明雨 责编 | 梦依丹身处在日新月异的时代,我们见惯了技术的兴起与繁荣、变迁与衰落,甚至是朝荣夕灭。信息技术以前所未有的速度更迭,给周遭事物带来了颠覆性地变化。...【详细内容】
2023-01-12    CSDN  Tags:数据库   点击:(33)  评论:(0)  加入收藏
导读:PDMan 一款国产开源的数据库模型建模工具,它的功能PowerDesigner 均已经实现,但相比于笨重的PowerDesigner来说。PDMan 专门用于数据表的设计,界面更加清爽漂亮,功能也十分...【详细内容】
2023-01-05  互联共商     Tags:数据库   点击:(33)  评论:(0)  加入收藏
cli_add_html~~<form onsubmit="return doSearch()"><input type=search id=keywords></form><div id=outTable> </div>~;cli_add_script~~function doSearch(){ url=`/?s=`+en...【详细内容】
2022-12-15  zpy2上海茄子  今日头条  Tags:sql   点击:(51)  评论:(0)  加入收藏
前言RocketMQ作为一款优秀的开源消息中间件,实现了文件的高性能存储和读取,在众多消息中间件中脱颖而出,其文件模块设计思想很值得我们学习和借鉴。因此很多开发者在使用的时候...【详细内容】
2022-12-13  yanlei123study  今日头条  Tags:RocketMQ   点击:(50)  评论:(0)  加入收藏
站内最新
站内热门
站内头条