sql >> Databáze >  >> NoSQL >> MongoDB

Správa dlouhotrvajících operací v MongoDB

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:

  1. opid - ID operace.
  2. op - Operace, která se provádí.
  3. ns - Databáze a kolekce, na které se operace provádí.
  4. 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:


  1. jak nakonfigurovat různé ttl pro každou mezipaměť redis při použití @cacheable ve springboot2.0

  2. Proč se nikde v kódu Node.js doporučuje neuzavírat připojení MongoDB?

  3. Víceoborové dotazování na Redis pomocí Redis Spring

  4. Aktualizace velkého počtu záznamů v kolekci