且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MongoDB当前操作db.currentOp()示例

更新时间:2022-09-18 23:12:50

停止某个操作:

$ mongo --port 17380   
MongoDB shell version: 2.4.5    
connecting to: 127.0.0.1:17380/test    
mongos> db.currentOp()    
{ "inprog" : [ ...] }

mongos> db.killOp("shard0001:163415563")


批量停止:

1
db.currentOp().inprog.forEach(function(item){db.killOp(item.opid)})

当查询超过1000秒的,停止:

1
db.currentOp().inprog.forEach(function(item){if(item.secs_running > 1000 )db.killOp(item.opid)})

停止某个数据源的查询:

1
db.currentOp().inprog.forEach(function(item){if(item.ns == "cswuyg.cswuyg")db.killOp(item.opid)})

把所有在等待锁的操作显示出来:

1
db.currentOp().inprog.forEach(function(item){if(item.waitingForLock)print(JSON.stringify(item))})

把处于等待中的分片显示出来:

1
db.currentOp().inprog.forEach(function(item){if(item.waitingForLock){print(item.opid.substr(0,9));print(item.op);}})

把非等待的分片显示出来:

1
db.currentOp().inprog.forEach(function(item){if(!item.waitingForLock){var lock_info = item["opid"];print(lock_info.substr(0,9));print(item["op"]);}})

查找所有的查询任务:

1
db.currentOp().inprog.forEach(function(item){if(item.op=="query"){print(item.opid);}})

查找所有的非查询任务:

1
db.currentOp().inprog.forEach(function(item){if(item.op!="query"){print(item.opid);}})

查找所有的操作:

1
db.currentOp().inprog.forEach(function(item){print(item.op, item.opid);});

 

常用js脚本,可直接复制到mongo-shell下使用:

 

显示当前所有的任务状态:

1
2
print("##########");db.currentOp().inprog.forEach(function(item){if(item.waitingForLock){var lock_info = item["opid"];print("waiting:",lock_info,item.op,item.ns);}});print
("----");db.currentOp().inprog.forEach(function(item){if(!item.waitingForLock){var lock_info = item["opid"];print("doing",lock_info,item.op,item.ns);}});print("##########");

 

杀掉某些特定任务:

(1)

1
2
db.currentOp().inprog.forEach(function(item){if(item.waitingForLock){var lock_info = item["opid"];if(item.op=="query" && item.secs_running >60 && item.ns=="cswuyg.cswuyg")
{db.killOp(item.opid)}}})

(2)

1
2
3
4
5
6
7
db.currentOp().inprog.forEach(function(item) {   
 var lock_info = item["opid"];    
 if (item.op == "query" && item.secs_running > 1000) {    
  print("kill", item.opid);    
  db.killOp(item.opid)    
 }    
})

















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1706903 ,如需转载请自行联系原作者