Esto puede ser un poco complicado, pero el hecho de que el shell MongoDB sea básicamente un intérprete de Javascript nos da opciones decentes en términos de filtrado. Aquí está la función que uso para lograr esto:
// 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);
}
}
};
Esto solo eliminará las consultas por encima del maxSecsRunning
umbral y no tocará nada que se ejecute contra la local
base de datos, que es donde oplog
vive (y, por lo tanto, es la base de datos que participa en las operaciones de replicación de larga ejecución. Es relativamente fácil agregar criterios al if
condicional interno para dirigir con mayor precisión las operaciones según sea necesario en función de necesidades específicas.
El código también está disponible como una esencia (donde recordaré actualizarlo de forma continua).