查看当前进行中的opreation
db.currentOp()
可以使用find()的方式查询。
db.currentOp({“ns” : “prod.users”})
返回结果参数:
“opid” //opreation id
“active” //完成或者暂停,等待锁(等待锁可以通过下面 waitingForLock参数 查看)
“secs_running” //运行时长
“op” //opreation类型
“desc” //和log中的消息相同, [conn3]等类似的格式
“locks” //锁的类型, ^代表global锁
“waitingForLock” //被block,等待锁
“numYields” //当前opreation暂停的次数。为别的操作释放资源。
“lockstats.timeAcquiringMicros” //获取锁花的时间
“killed” //被杀掉,但是还没有彻底关掉的opreation独有的field
杀掉opreation:
db.killOp(123)
系统产生的慢查询,不需要kill:
- replication thread
- sharding的writebacklistener命令
Profiler
作用:将发生的opreation记录到ns 为system.profile的 capped colletction中,用于对服务器状态进行检测。
缺点:明显降低mongod的性能。
system.profile 不存在时,系统会自动创建一个小容量capped collection
可以通过drop, create的方式修改system.profile的cap size
| 记录的操作: |
| CRUD |
| Administrative operations |
| Configuration operations |
关闭/开启Profiler:
> db.setProfilingLevel(2,100) //database level enable
{ “was” : 0, “slowms” : 100, “ok” : 1 }
参数解读:
level 2 代表 记录所有opreation
1代表, 记录超过slowms阈值的query, 默认slowms=100
0代表,关闭profiler
第二位参数即为,设定slowms
查看当前profiler level:
db.getProfilingLevel()
查看Object大小
查看Document大小:
Object.bsonsize({_id:ObjectId()})
Object.bsonsize(db.users.findOne())
查看Collection大小:
db.boards.stats()
返回结果参数说明:
db.big.stats(1024*1024*1024*1024) —-按指定单位显示,1024 for kilobytes, 1024*1024 for megabytes
“size” // = (“avgObjSize” * “count” )= Object.bsonsize() of all document in the collection
“avgObjSize”
“count”
“storageSize” // 含padding和indexes,空的占位数据。即占用硬盘空间
“nindexes” // index数量
查看collection是否损坏:
db.movies.validate() //损坏如果显示单个document, invalid BSONObj,可以删除document修复collection。 如果是pdfile损坏,基本无法恢复。
Pdfile是mongdb数据存储的核心
查看Database大小:
db.stats()
返回结果参数说明:
“fileSize” // 硬盘上存这个db的数据文件大小总和
“storageSize” //占用的存储空间,不含空的占位数据
“dataSize” // 真实数据占用的大小。= “storageSize” – “删除的document”
“nsSizeMB” // namespace 文件大小
Keep in mind that listing databases on a system with a high lock percent can be very slow and block other operations. Avoid doing it, if possible.