Isso pode ser um pouco complicado, mas o fato de o shell do MongoDB ser basicamente um interpretador Javascript nos oferece opções decentes em termos de filtragem. Aqui está a função que eu uso para fazer isso:
// 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);
}
}
};
Isso mata apenas as consultas acima do maxSecsRunning
limite e não toca em nada em execução no local
banco de dados, que é onde estão as oplog
vidas (e, portanto, é o banco de dados envolvido nas operações de replicação de longa execução. É relativamente fácil adicionar critérios à if
condicional interna direcionar com mais precisão as operações conforme necessário, com base em necessidades específicas.
O código também está disponível como uma essência (onde eu lembrarei de atualizá-lo continuamente).