阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何监控MongoDB数据库性能

292次阅读
没有评论

共计 3768 个字符,预计需要花费 10 分钟才能阅读完成。

导读 最近项目在使用 MongoDB 作为图片和文档的存储数据库,为啥不直接存 MySQL 里,还要搭个 MongoDB 集群,麻不麻烦?让我们一起,一探究竟,继续学习 MongoDB 数据库性能监控,实现快速入门,丰富个人简历,提高面试 level,给自己增加一点谈资,秒变面试小达人,BAT 不是梦。

如何监控 MongoDB 数据库性能

一、MongoDB 启动慢
1、启动日常卡住

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

如何监控 MongoDB 数据库性能

如何监控 MongoDB 数据库性能

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

如何监控 MongoDB 数据库性能

如何监控 MongoDB 数据库性能

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

如何监控 MongoDB 数据库性能

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

如何监控 MongoDB 数据库性能

二、原因分析

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

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

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

三、MongoDB 内存使用

如何监控 MongoDB 数据库性能

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

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

  • 可以添加一个分片;
  • 删除未使用的索引;
  • 可以执行压缩操作;
  • 关闭副本集成员,将其数据复制到更大的磁盘中挂载;
  • 用较大驱动器的成员替换副本集中的成员;
  • 五、常用命令
    1、MongoDB 获取系统信息
    db.hostInfo()

    如何监控 MongoDB 数据库性能

    2、MongoDB 获取系统内存情况
    db.serverStatus().mem

    如何监控 MongoDB 数据库性能

    3、MongoDB 获取连接数信息
    db.serverStatus().connections

    如何监控 MongoDB 数据库性能

    4、MongoDB 获取全局锁信息
    db.serverStatus().globalLock

    如何监控 MongoDB 数据库性能

    5、MongoDB 获取操作统计计数器
    db.serverStatus().opcounters

    如何监控 MongoDB 数据库性能

    6、MongoDB 获取数据库状态信息
    db.stats()

    如何监控 MongoDB 数据库性能

    以上是 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 是一个从 0 000 000 001 开始的数字。

    如何监控 MongoDB 数据库性能

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

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计3768字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19351
    评论数
    4
    阅读量
    8004481
    文章搜索
    热门文章
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

    再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

    再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
    飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

    飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

    飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

    每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

    每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
    星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

    星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

    星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
    星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

    星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

    星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
    你的云服务器到底有多强?宝塔跑分告诉你

    你的云服务器到底有多强?宝塔跑分告诉你

    你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
    12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

    12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

    12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

    星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

    星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
    如何安装2026年最强个人助理ClawdBot、完整安装教程

    如何安装2026年最强个人助理ClawdBot、完整安装教程

    如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
    300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

    300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

      300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
    免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

    免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

      免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...