Get the App
SLTechnology News&Howtos  ›  Database  › 

How to use the db.currentOp () method in MongoDB

Shulou Source: shulou.com Published: 2022-05-31 21:11:23 10月02日 Update

这篇文章给大家介绍MongoDB中db.currentOp()方法如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

停止某个操作:

$ 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")

批量停止:

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

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

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

停止某个数据源的查询:

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

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

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

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

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

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

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

查找所有的查询任务:

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

查找所有的非查询任务:

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

查找所有的操作:

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

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

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

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)

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)

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)

}

})

关于MongoDB中db.currentOp()方法如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

Tags: Tasks queries methods content more help good interest guys buddies commonly used data data sources articles status knowledge articles scripts previous places references Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno OPPO Reno Shulou Tech Info Redmi Microsoft Huawei