นี่อาจเป็นเรื่องยุ่งยากเล็กน้อย แต่ความจริงที่ว่า MongoDB shell นั้นเป็นล่าม 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
ชีวิต (และด้วยเหตุนี้เป็นฐานข้อมูลที่มีส่วนเกี่ยวข้องในการทำงานนาน Ops จำลองแบบ. มันค่อนข้างง่ายที่จะเพิ่มเกณฑ์การภายในif
เงื่อนไข ไปยังเป้าหมายการดำเนินงานที่แม่นยำยิ่งขึ้นตามความจำเป็นตามความต้องการเฉพาะ
รหัสนี้ยังมีอยู่ในส่วนสำคัญ (ที่ฉันจะจำเพื่อปรับปรุงอย่างต่อเนื่อง)