Điều này có thể hơi khó khăn, nhưng thực tế là trình bao MongoDB về cơ bản là một trình thông dịch Javascript cung cấp cho chúng ta các tùy chọn hợp lý về mặt lọc. Đây là chức năng tôi sử dụng để thực hiện điều này:
// 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);
}
}
};
Điều này sẽ chỉ giết các truy vấn trên maxSecsRunning
ngưỡng và sẽ không chạm vào bất cứ thứ gì chạy trên local
cơ sở dữ liệu, đó là nơi oplog
tồn tại (và do đó là cơ sở dữ liệu có liên quan đến các bản sao hoạt động dài. Nó tương đối dễ dàng để thêm tiêu chí vào if
điều kiện bên trong để chính xác hơn hoạt động mục tiêu khi cần dựa trên nhu cầu cụ thể.
Mã này cũng có sẵn như là một ý chính (nơi tôi sẽ nhớ để cập nhật nó trên cơ sở liên tục).