Ini mungkin sedikit rumit, tetapi fakta bahwa shell MongoDB pada dasarnya adalah penerjemah Javascript memberi kita opsi yang layak dalam hal penyaringan. Berikut adalah fungsi yang saya gunakan untuk mencapai ini:
// 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);
}
}
};
Ini hanya akan membunuh permintaan di atas maxSecsRunning
ambang batas dan tidak akan menyentuh apa pun yang berjalan terhadap local
basis data, yang merupakan tempat oplog
tinggalnya (dan karenanya merupakan basis data yang terlibat dalam operasi replikasi yang berjalan lama. Ini relatif mudah untuk menambahkan kriteria ke if
kondisi dalam untuk lebih tepatnya menargetkan operasi sesuai kebutuhan berdasarkan kebutuhan spesifik.
Kode ini juga tersedia sebagai intisari (di mana saya akan ingat untuk memperbaruinya secara berkelanjutan).