mongodb系列之-管理mongodb->db.currentOp()

管理mongodb->db.currentOp(), 绝对是原创...

今天公司的dba在内部分享了针对mysql上具体的每个crud语句操作如何进行控制管理(利用的inntop工具),挺好的。这里,我也献丑下,在mongodb中如何管理具体的每个crud操作(比如某个查询语句慢,太占资源,直接可以将其kill掉,这貌似很暴力哈,不过没关系,有时候不得已而为之...不过mongodb中可不是用第三方的工具哦,而是自家实现的功能,顶...)

currentOp是个好东西,顾名思义,就是当前的操作。在mongodb中可以查看当前数据库上此刻的操作语句信息,包括insert/query/update/remove/getmore/command等多种操作。直接执行db.currentOp()一般返回一个空的数组,我们可以指定一个参数true,这样就返回用户connections与系统cmmand相关的操作。下面看个列子:

执行命令会返回一个inprog数组,数组中每个元素都是一个nested document,以其中一个为例,解释下具体意思:

{

"opid" : 37432,//此操作的id

"active" : false,//此操作是否处于活动状态

"secs_running" : 0,//此操作运行了多少秒

"op" : "query",//具体的操作行为,包括(insert/query/update/remove/getmore/command)

"ns" : "category.categoryDocs",//此操作的命名空间,数据库名.集合名

//具体的操作语句

"query" : {

"cname" : "孢子植物",

"sort" : 2

},

"client" : "*.*.*.*:21758",//连接的客户端信息

"desc" : "conn724",//数据库连接描述

"threadId" : "0x78156940",//线程id

"connectionId" : 724,//数据库连接id

"waitingForLock" : false,//是否在等待获取锁,

"numYields" : 0,

"lockStats" : {

"timeLockedMicros" : {//此操作获得以下锁后,把持的微秒时间

"R" : NumberLong(0),//整个mongodb服务实例的全局读锁

"W" : NumberLong(0),//整个mongodb服务实例的全局写锁

"r" : NumberLong(170),//整个数据库实例的读锁

"w" : NumberLong(0)//整个数据库实例的写锁

},

"timeAcquiringMicros" : {//此操作为了获得以下的锁,而耗费等待的微秒时间

"R" : NumberLong(),//整个mongodb服务实例的全局读锁

"W" : NumberLong(),//整个mongodb服务实例的全局写锁

"r" : NumberLong(5),//整个数据库实例的读锁

"w" : NumberLong(0),//整个数据库实例的写锁

}

}

}

时间单位换算:

1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)

1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)

其实,我们可以写脚本对inprog数组进行筛选来得到自己想要的数据,比如:

1:--获取已停止活动+操作为查询的数据

db.currentOp(true).inprog.forEach(

function(opDoc){//opDoc其实是返回的每个op操作对象

if(!opDoc.active && opDoc.op=='query')

printjson(d)//打印信息

}

)

2:--正在进行中+操作为查询的数据

db.currentOp(true).inprog.forEach(

function(opDoc){//opDoc其实是返回的每个op操作对象

if(opDoc.active && opDoc.op=='query')

printjson(d)//打印信息

}

)

通过以上监控如果发现某个操作比较慢,还可以对其进行kill,很简单,知道了具体的opid后,一句命令就可以搞定,so easy:

db.killOp(opid) //kill当前的操作 opid为具体的操作id号,当然了,只能kill正在进行中的

好了,先写这么多,有时间了继续写自己在mongodb方面的心得,记下来不为别的,只为刚入门的兄弟少走弯路....

http://www.myexception.cn/database/1260955.html

mongodb系列之-治理mongodb->db.currentOp()的更多相关文章

  1. MongoDB分析工具之三:db.currentOp()

    db.currentOp() db.currentOp是个好东西,顾名思义,就是当前的操作.在mongodb中可以查看当前数据库上此刻的操作语句信息,包括insert/query/update/rem ...

  2. MongoDB系列:把mongodb作为windows的服务来启动

    1.首先切换到mongodb安装目录下的bin目录,在控制台直接运行以下命令 "C:\Program Files\MongoDB\Server\3.0\bin\mongod.exe" ...

  3. Mongodb系列:初识Mongodb

    一.背景: 月初进行了期末考试非常荣幸可以參加到了考试系统维护中(详情请阅读:<那些年我们一起參加的活动:15年上半年考试系统维护总结>)!主要负责server维护,在维护期间对Mongo ...

  4. MongoDB系列—— Window 搭建Mongodb 集群

    Mongodb的集群方式的搭建有三种:Replica Set / Sharding / Master-Slaver.这里只说明最简单的集群搭建方式(Replica Set) Replica Set M ...

  5. MongoDB系列[2]:MongoDB导入导出以及数据库备份

    PS: 以下所有操作都是基于MongoDB自带的工具进行的,所以操作时一定要手动切换到Mongodb的bin目录下面,并且使用管理员权限运行命令 导出工具 mongoexport 概念: mongoD ...

  6. MongoDB系列二:MongoDB安装过程

    一.MongoDB安装,以Linux系统安装为例:(下载:www.mongodb.org 注意使用stable版本) 1.下载最新版本的MongoDB安装包,wget http://fastdl.mo ...

  7. MongoDB系列一:MongoDB文档型数据库特点介绍

    一.MongoDB数据库的存储特点: 1.MongoDB是文档型数据库,存储的是文档(将json二进制化为Bson存储): 2.存储的每篇文档都可以有自己独特的存储结构,颠覆了传统数据库必须按照表和列 ...

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

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

  9. MongoDB副本集配置系列八:MongoDB监控

    1:Mongostat MongoDB2.6版本 MongoDB3.0版本 2:db.setProfilingLevel(2):打开profiler 类似于MySQL的slow log Profile ...

随机推荐

  1. LuoguP3261 [JLOI2015]城池攻占

    题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi &l ...

  2. HDU3487 Play with Chain splay 区间反转

    HDU3487 splay最核心的功能是将平衡树中的节点旋转到他的某个祖先的位置,并且维持平衡树的性质不变. 两个操作(数组实现) cut l,r, c把[l,r]剪下来放到剩下序列中第c个后面的位置 ...

  3. Factstone Benchmark(数学)

    http://poj.org/problem?id=2661 题意:Amtel在1960年发行了4位计算机,并实行每十年位数翻一番的策略,将最大整数n作为改变的等级,其中n!表示计算机的无符号整数(n ...

  4. js:正则表达

    一:正则表达对象方法 1:compile()方法   //编译正则表达式 实例:在字符串中全局搜索“man”,并用“person”替换,然后通过compile()方法,改变正则表达式,用person替 ...

  5. thinkphp vender

    vender在thinkphp里面时引入系统的类库的意思,具体用法如下. Vendor('Classes.PHPExcel');表示引入vendor目录下的classes文件夹下面的phpexcel文 ...

  6. [Swift通天遁地]八、媒体与动画-(8)使用开源类库快速实现位移动画

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. ARM VM安装Linux Diagnostic 2.3扩展

    目前创建的Azure Linux虚拟机默认安装的是LAD 3.0,如果客户有特殊需求,可以通过如下方法安装LAD 2.3 1.在Azure Portal卸载LAD 3.0 2.使用Azure Powe ...

  8. Kafka详解与总结(五)

    Kafka持久化 1. 概述 Kafka大量依赖文件系统去存储和缓存消息.对于硬盘有个传统的观念是硬盘总是很慢,这使很多人怀疑基于文件系统的架构能否提供优异的性能.实际上硬盘的快慢完全取决于使用它的方 ...

  9. BZOJ 3456 NTT图的计数 容斥

    思路: RT 懒得写了 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm&g ...

  10. 【MySQL】RPM包安装

    操作系统:Red Hat Enterprise Linux Server release 6.5 Mysql安装包:MySQL-5.6.35-1.linux_glibc2.5.x86_64.rpm-b ...