Bu biraz zor olabilir, ancak MongoDB kabuğunun temelde bir Javascript yorumlayıcısı olması, filtreleme açısından bize iyi seçenekler sunar. İşte bunu gerçekleştirmek için kullandığım işlev:
// kills long running ops in MongoDB (taking seconds as an arg to define "long")
// attempts to be a bit safer than killing all by excluding replication related operations
// and only targeting queries as opposed to commands etc.
killLongRunningOps = function(maxSecsRunning) {
currOp = db.currentOp();
for (oper in currOp.inprog) {
op = currOp.inprog[oper-0];
if (op.secs_running > maxSecsRunning && op.op == "query" && !op.ns.startsWith("local")) {
print("Killing opId: " + op.opid
+ " running over for secs: "
+ op.secs_running);
db.killOp(op.opid);
}
}
};
Bu, yalnızca maxSecsRunning
eşiğin üzerindeki sorguları öldürür ve local
veritabanına karşı çalışan hiçbir şeye dokunmaz , bu da oplog
yaşamların olduğu yerdir (ve bu nedenle uzun süren çoğaltma işlemlerinde yer alan veritabanıdır. İç if
koşullara kriter eklemek nispeten kolaydır. belirli ihtiyaçlara göre operasyonları gerektiği gibi daha hassas bir şekilde hedeflemek.
Kod aynı zamanda bir gist olarak da mevcuttur (burada sürekli olarak güncellemeyi hatırlayacağım).