MongoDB giver dig en række værktøjer til at styre langvarige operationer i systemet. Det er ekstremt vigtigt at holde styr på operationer, der kører på din produktionsserver på et hvilket som helst tidspunkt, da du i nogle tilfælde kan have rouge-forespørgsler eller indeks-builds, der ødelægger din servers ydeevne.
MongoDB-kommandoen, som giver dig disse oplysninger, er "db.currentOp()". For mere information henvises til MongoDB-dokumentationen for db.currentOp(). Kommandoen tager parametre for at begrænse output med enten db, operation, udførelsestid osv.
Her er et eksempel på output:
{ 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 interessante felter er:
- opid - ID for operationen.
- op - Den handling, der udføres.
- ns - Databasen og samlingen, som handlingen udføres på.
- secs_running - Det antal sekunder, handlingen har kørt.
Når du har identificeret de langvarige operationer, vil du måske i nogle tilfælde afslutte dem. Den handling du vil bruge er:
db.killOp(<opid>)
Det siger sig selv, at du ønsker at bruge denne kommando meget omhyggeligt. Afbryd ikke operationer, du ikke kender til. Jeg føler mig personligt kun tryg ved at afslutte langvarige forespørgsler.
Hvis du har operationer, der konsekvent tager lang tid, tilbyder MongoDB en anden mulighed – maxTimeMS:
E.g. db.find(...).maxTimeMS(30)
Hvis du ved, at du har langvarige operationer, som du vil stoppe, efter at en vis mængde af eksekveringstid er overskredet, skal du bruge maxTimeMS-indstillingen til at sætte en grænse for udførelsestiden for denne operation.
Hos ScaleGrid forstår vi vigtigheden af denne arbejdsgang – så vi har indbygget den i vores administrationskonsol. 'Admin'-konsollen på siden med klyngedetaljer giver adgang til operationslisten på din MongoDB-server:
Du kan også vælge en bestemt handling og vælge at afslutte den. Udfør som altid denne mulighed med skøn: