Це може бути трохи хитро, але той факт, що оболонка MongoDB - це в основному інтерпретатор Javascript, дає нам гідні варіанти щодо фільтрації. Ось функція, яку я використовую для цього:
// 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);
}
}
};
Це знищить запити лише вище maxSecsRunning
порогового значення і не торкнеться нічого, що працює проти local
бази даних, і саме там oplog
живе життя (а значить, і база даних, яка бере участь у довготривалому операційному режимі реплікації. Додавання критеріїв до внутрішнього if
умовного відношення досить легко). точніше цільові операції в міру необхідності на основі конкретних потреб.
Код також доступний як суть (де я буду пам'ятати, щоб постійно його оновлювати).