MongoDB vám poskytuje řadu nástrojů pro správu dlouhotrvajících operací v systému. Je nesmírně důležité neustále sledovat operace běžící na vašem produkčním serveru, protože v některých případech můžete mít rouge dotazy nebo sestavení indexu, které snižují výkon vašeho serveru.
Příkaz MongoDB, který vám poskytuje tyto informace, je „db.currentOp()“. Další informace naleznete v dokumentaci MongoDB pro db.currentOp(). Příkaz přebírá parametry pro omezení výstupu buď db, operací, dobou provádění atd.
Zde je příklad výstupu:
{ 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 } }
Nejzajímavější pole jsou:
- opid - ID operace.
- op - Operace, která se provádí.
- ns - Databáze a kolekce, na které se operace provádí.
- secs_running - Počet sekund, po které operace probíhala.
Jakmile identifikujete dlouhotrvající operace, možná je budete chtít v některých případech ukončit. Operace, kterou chcete použít, je:
db.killOp(<opid>)
Je samozřejmé, že tento příkaz chcete používat velmi opatrně. Neukončujte operace, o kterých nevíte. Osobně se cítím pohodlně pouze při ukončování dlouhotrvajících dotazů.
Pokud máte operace, které trvale trvají dlouhou dobu, MongoDB nabízí další možnost – maxTimeMS:
E.g. db.find(...).maxTimeMS(30)
Pokud víte, že máte dlouhotrvající operace, které chcete zastavit po překročení určité doby provádění, použijte možnost maxTimeMS k nastavení limitu doby provádění této operace.
Ve ScaleGrid chápeme důležitost tohoto pracovního postupu – proto jsme jej zabudovali do naší administrátorské konzole. 'administrátorská' konzole na stránce podrobností clusteru poskytuje přístup k seznamu operací na vašem serveru MongoDB:
Můžete také vybrat konkrétní operaci a rozhodnout se pro její ukončení. Jako vždy použijte tuto možnost s rozvahou: