1. 查看当前操作
mongos> db.currentOp()
{
"inprog" : [
{
"shard" : "study",
"type" : "op",
"host" : "2bffe09ec303:27019",
"desc" : "ReplBatcher",
"active" : true,// 操作是否正在执行
"opid" : "study:3427",// 操作的唯一标识符
"numYields" : 0,// 操作释放锁允许其他操作进行的次数
"locks" : {// 描述操作获取锁的类型 },
"waitingForLock" : false,// 操作当前是否处于阻塞并等待结果
},
{
...
"secs_running" : NumberLong(0),// 操作执行时间(秒)
"microsecs_running" : NumberLong(239),// 操作执行时间(微秒)
"op" : "command", // 操作类型
}
],
"ok" : 1,
...
}
1.1 寻找有问题操作

client字段可以跟踪旧版本或者漏洞版本的软件信息

1.2 终止操作
// 传入opid,只有当操作让出时,才能终止操作
> db.killOp('study:2')
1.3 假象

任何在local.oplog.rs上长时间运行的请求及任何回写监听命令都可以被忽略。

MongoDB会长时间运行若干请求,最常见是复制线程和用于分片的回写监听器。

1.4 防止幻象操作

如果MongoDB中请求发生堆积,呢么写操作将堆积在操作系统的套接字缓冲区中。当终止正在进行的写操作时,就会开始处理缓冲区中的写操作。即使客户端停止发送写操作,MongoDB也会处理那些写入缓冲区的操作。

防止幻像写入的最好方法是执行写入确认机制。

2. 计算大小
2.1 文档

获取文档大小

> Object.bsonsize({_id:ObjectId()})
> Object.bsonsize(db.users.findOne())
2.2 集合
// 查看整个集合的信息
> db.movies.stats()
// 以TB为单位获取集合的统计数据
> db.big.stats(1024*1024*1024*1024)
2.3 数据库
// 查看整个数据库的信息
> db.stats()
3. 使用mongotop和mongostat
# mongotop -h localhost:27039
2022-07-24T11:43:55.304+0800 connected to: mongodb://localhost:27039/ ns total read write 2022-07-24T11:43:56+08:00
local.oplog.rs 1ms 1ms 0ms
admin.system.keys 0ms 0ms 0ms
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
config.actionlog 0ms 0ms 0ms
config.chunks 0ms 0ms 0ms
config.collections 0ms 0ms 0ms
config.lockpings 0ms 0ms 0ms
config.mongos 0ms 0ms 0ms
config.settings 0ms 0ms 0ms
# mongostat -h localhost:27039
// insert query update delete getmore command 每秒操作发生次数简单统计
// flushes 将数据刷新到磁盘的次数
// vsize 所使用虚拟内存数量
// res 正在使用内容大小
// qr|qw 读操作和写操作的队列大小
// ar|aw 有多少活跃的客户端
// net_in net_out 网络传入传出字节数
// conn 连接数
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn set repl time
*0 *0 *1 *0 2 7|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 3.89k 79.6k 16 configRS SEC Jul 24 11:52:41.199
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 524b 74.5k 16 configRS SEC Jul 24 11:52:42.202
*0 *0 *0 *0 0 4|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 1.06k 76.2k 16 configRS SEC Jul 24 11:52:43.200
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 731b 75.5k 16 configRS SEC Jul 24 11:52:44.200
*0 *0 *0 *0 0 3|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 1.06k 76.0k 16 configRS SEC Jul 24 11:52:45.200
*0 *0 *0 *0 1 3|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 1.84k 76.0k 16 configRS SEC Jul 24 11:52:46.199
*0 *0 *0 *0 0 3|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 1.06k 76.0k 16 configRS SEC Jul 24 11:52:47.200
*0 2 *0 *0 0 2|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 1.37k 75.9k 16 configRS SEC Jul 24 11:52:48.199
*0 *0 *0 *0 0 3|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 1.06k 76.0k 16 configRS SEC Jul 24 11:52:49.200
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 1.93G 154M 0|0 1|0 731b 75.4k 16 configRS SEC Jul 24 11:52:50.200

欢迎关注公众号算法小生沈健的技术博客

17.MongoDB系列之了解应用程序动态的更多相关文章

  1. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  2. mongodb系列之---副本集配置与说明

    在配置副本集之前,我们先来了解一些关于副本集的知识. 1,副本集的原理 副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置 ...

  3. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

  4. 14.MongoDB系列之配置分片

    1. 启动服务器 1.1 启动配置服务器 配置服务器是集群的大脑,保存着关于每个服务器包含哪些数据的所有元数据,因此,必须首先创建配置服务器. 由于资源限制,在同一机器上启动三个进程 # mkdir ...

  5. MongoDB源码分析——mongod程序源码入口分析

    Edit 说明:第一次写笔记,之前都是看别人写的,觉得很简单,开始写了之后才发现真的很难,不知道该怎么分析,这篇文章也参考了很多前辈对MongoDB源码的分析,也有一些自己的理解,后续将会继续分析其他 ...

  6. MongoDB系列之二(主动复制)

    目前我正在进行MongoDB的双机热备方面相关的工作.根据我目前看到的MongoDB方面的材料,MongoDB的实际部署有三种方式,分别是“主动复制”,“副本集”以及“分片副本集”. 首先我们从最简单 ...

  7. MongoDB系列二(介绍).

    一.特点 学习一个东西,至少首先得知道它能做什么?适合做什么?有什么优缺点吧? 传统关系型数据库,遵循三大范式.即原子性.唯一性.每列与主键直接关联性.但是后来人们慢慢发现,不要把这些数据分散到多个表 ...

  8. C# WINFORM 应用程序动态读写xml config文件,获取数

    在实际项目里,我们需要用一个应用程序去连接多个数据库,有的进行测试,有的是数据库基本结构相同,数据不同, 我们不可能总去程序的连接字符串里去修改,更不能让用户去修改,所以需要动态去修改连接数据库配置信 ...

  9. 在ASP.NET程序中用程序动态向<head>便签里添加<meta>标签

    在使用ASP.NET框架开发: 若要在Html网页中加入<meta>设置,但想通过程序动态加入: 1.如果是ASP.NET4.0以前版本: 使用HtmlMeta类加入<meta> ...

随机推荐

  1. 越折腾越好用的 3 款开源 APP

    高中的时候我特别喜欢捣鼓手机,然后我一个哥们儿在我的强烈推荐下买了个 HTC Dream(G1) 手机. G1 作为谷歌的第一个亲儿子,它出厂搭载的是 Android 1.5 系统,但当时已经出到了 ...

  2. DolphinScheduler & K8s 在优路科技的实践

    T 摘要 · 本文通过介绍DolphinScheduler on Kubernetes 在优路科技的实践,阐述了DolphinScheduler如何在云原生时代,更好地助力企业实现高效的数据调度解决方 ...

  3. MySQL更新锁表超时 Lock wait timeout exceeded

    背景 最近在做一个订单的钉钉审批功能,钉钉审批通过之后,订单更新审核状态,然后添加一条付款,并且更新付款状态: // 订单审批通过 @Transactional(rollbackFor = Excep ...

  4. 简单概述因特网(Internet)

    学习目的 了解 Internet 的概念,区别因特网与互联网. 了解 Internet 的基本结构. 了解 Internet 的发展历史. Internet 概念 因特网(Internet)是全球性的 ...

  5. spring使用junit单元测试

    <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test& ...

  6. java过滤器的写法

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 原文地址:http://t.csdn.cn/ZD88A ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 过滤器实际上就是 ...

  7. 10_Linux基础-SHELL入门1

    @ 目录 10_Linux基础-SHELL入门1 一. 输入输出重定向 二. 2个特殊文件 三. here document 四. tee命令 五. 清空文件内容 六. SHELL入门 SHELL的变 ...

  8. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  9. ViewBinding 与 Kotlin 委托双剑合璧

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭 ...

  10. Batch Norm 与 Layer Norm 比较

    一.结论 Batch Norm一般用于CV领域,而Layer Norm一般用于NLP领域 Batch Norm需要计算全局平均,而Layer Norm不需要计算全局平均 二.Batch Norm Ba ...