一、查看当前的操作
1、db.currentOp()
currentOp会将后端Mongod上正在执行的请求都列出来,也可根据查询条件(如请求类型,请求是否正在等待锁,请求操作的DB或collection)来进行过滤。
example:
查询连接到db1上的操作时间大于3s的操作:
db.currentOp(
{
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1\./
}
)
output example:
{
"inprog": [
{
"desc" : <string>,
"threadId" : <string>,
"connectionId" : <number>,
"opid" : <number>,
"active" : <boolean>,
"secs_running" : <NumberLong()>,
"microsecs_running" : <number>,
"op" : <string>,
"ns" : <string>,
"query" : <document>,
"insert" : <document>,
"planSummary": <string>,
"client" : <string>,
"msg": <string>,
"progress" : {
"done" : <number>,
"total" : <number>
},
"killPending" : <boolean>,
"numYields" : <number>,
"locks" : {
"Global" : <string>,
"MMAPV1Journal" : <string>,
"Database" : <string>,
"Collection" : <string>,
"Metadata" : <string>,
"oplog" : <string>
},
"waitingForLock" : <boolean>,
"lockStats" : {
"Global": {
"acquireCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"acquireWaitCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
},
"deadlockCount" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
}
},
"MMAPV1Journal": {
...
},
"Database" : {
...
},
...
}
},
...
],
"fsyncLock": <boolean>,
"info": <string>
}
输出中的重要字段:
opid:
操作的唯一标识,可以在mongo shell中通过db.killOp(opid)终止一个操作。
active:
表示操作是否正在运行。如果该字段值为false,表示该操作已经交出或者整在等待其他操作交出锁。
secs_running:
表示该操作已经运行的时长,可通过该字段判断慢查询。
op:
表示操作的类型,通常是查询、插入、更新、删除的一种。注意数据库命令也被当做查询操作来处理。
WaitingForLock:
表示该操作是否因正在等待其他操作交出锁而处于等待状态。
numYields:
表示操作交出锁而使其他操作得以运行的次数。通常进行文档搜索的操作(查询、更新和删除)可以交出锁。
2、db.killOp()
可以db.killOp(opid)终止操作。
并非所有的操作都可以被终止,只有交出了锁的进程的才能被终止,正在占用锁,或者正在等待其他操作交出锁的操作通常无法被终止。
二、计算空间消耗
1、查看文档大小
Object.bsonsize({_id:ObjectId()})
2、查看数据库信息
db.stats()
MongoDB Enterprise > db.stats()
{
"db" : "test",
"collections" : 1,
"objects" : 2000,
"avgObjSize" : 33,
"dataSize" : 66000,
"storageSize" : 73728,
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 49152,
"ok" : 1
}
MongoDB Enterprise >
可以在stats中传入比例因子:KB的值为1024,MB为1024*1024,以此类推
MongoDB Enterprise > db.stats(1024)
{
"db" : "test",
"collections" : 1,
"objects" : 2000,
"avgObjSize" : 33,
"dataSize" : 64.453125,
"storageSize" : 72,
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 48,
"ok" : 1
}
MongoDB Enterprise >
3、查看集合信息
db.collection.stats()
4、mongotop 和 mongostat
mongodb自带几个命令行工具,可以每个几秒输出当前的状态。
yangweideMacBook-Pro:~ yangwei$ mongostat
insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn time
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:53+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 1 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:54+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:55+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:56+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:57+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:58+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:59+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:20:00+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:20:01+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:20:02+08:00
mongostat默认每秒输出一次,可传入参数更改时间间隔
yangweideMacBook-Pro:~ yangwei$ mongostat 2 # 每隔2s输出一次
输出说明:
insert query update delete getmore command 每种操作发生的次数
flushes mongod将数据刷新到磁盘的次数
vsize mongod正在使用的虚拟内存的大小,通常为数据目录的2倍大小(一次用于映射文件,一次用于日记系统)
res mongod正在使用的内存的大小,通常该值应该尽量接近机器所有内存的大小。
qr | qw 读写操作队列大小,即有多少读写操作被阻塞,等待进行处理。
ar | aw 活动客户端的数量,即正在进行读写操作的客户端。
netIn 通过网络传输进来的字节数。
netOut 通过网络传输出去的字节数。
conn 此服务器打开的连接数,包括输入和输出的连接。