MongoDB ger dig ett antal verktyg för att hantera långvariga operationer i systemet. Det är extremt viktigt att hålla reda på operationer som körs på din produktionsserver när som helst, eftersom du i vissa fall kan ha rouge-frågor eller indexbyggen som dödar serverns prestanda.
MongoDB-kommandot som ger dig denna information är "db.currentOp()". För mer information se MongoDB-dokumentationen för db.currentOp(). Kommandot tar parametrar för att begränsa utmatningen med antingen db, operation, exekveringstid etc.
Här är ett exempel på utdata:
{ opid: 294, active: false, op: "query", ns: "admin", query: { "query": {}, orderby: { "$natural": -1 } }, client: "0.0.0.0:0", desc: "rsMgr", threadId: "0x7f3e6af3f700", waitingForLock: false, numYields: 0, lockStats: { timeLockedMicros: { R: 1, W: 1 }, timeAcquiringMicros: { r: 1, w: 1 } }
De mest intressanta fälten är:
- opid - ID för operationen.
- op - Operationen som körs.
- ns - Databasen och samlingen som operationen körs på.
- secs_running - Antalet sekunder som operationen har körts.
När du har identifierat de långvariga operationerna kanske du vill avsluta dem i vissa fall. Operationen du vill använda är:
db.killOp(<opid>)
Det säger sig självt att du vill använda detta kommando mycket noggrant. Avsluta inte verksamhet som du inte känner till. Jag personligen känner mig bara bekväm med att avsluta långvariga frågor.
Om du har operationer som konsekvent tar lång tid, erbjuder MongoDB ett annat alternativ – maxTimeMS:
E.g. db.find(...).maxTimeMS(30)
Om du vet att du har långvariga operationer som du vill stoppa efter att en viss exekveringstid har överskridits, använd alternativet maxTimeMS för att sätta en gräns för exekveringstiden för denna operation.
På ScaleGrid förstår vi vikten av detta arbetsflöde – så vi har byggt in det i vår administratörskonsol. "Admin"-konsolen på klusterinformationssidan ger åtkomst till operationslistan på din MongoDB-server:
Du kan också välja en viss operation och välja att avsluta den. Utöva som alltid detta alternativ med diskretion: