MongoDB udostępnia szereg narzędzi do zarządzania długotrwałymi operacjami w systemie. Niezwykle ważne jest śledzenie operacji wykonywanych na serwerze produkcyjnym w dowolnym momencie, ponieważ w niektórych przypadkach możesz mieć fałszywe zapytania lub kompilacje indeksów, które obniżają wydajność Twojego serwera.
Polecenie MongoDB, które podaje te informacje, to „db.currentOp()”. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją MongoDB dotyczącą db.currentOp(). Polecenie pobiera parametry, aby ograniczyć dane wyjściowe przez db, operację, czas wykonania itp.
Oto przykładowe wyjście:
{ 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 } }
Najciekawsze pola to:
- opid - Identyfikator operacji.
- op - Operacja, która jest wykonywana.
- ns - Baza danych i kolekcja, na których wykonywana jest operacja.
- secs_running — Liczba sekund działania operacji.
Po zidentyfikowaniu długotrwałych operacji, w niektórych przypadkach możesz chcieć je zakończyć. Operacja, której chcesz użyć to:
db.killOp(<opid>)
Nie trzeba dodawać, że chcesz używać tego polecenia bardzo ostrożnie. Nie przerywaj operacji, o których nie wiesz. Osobiście czuję się komfortowo tylko kończenie długotrwałych zapytań.
Jeśli masz operacje, które konsekwentnie zajmują dużo czasu, MongoDB zapewnia inną opcję – maxTimeMS:
E.g. db.find(...).maxTimeMS(30)
Jeśli wiesz, że masz długotrwałe operacje, które chcesz zatrzymać po przekroczeniu określonego czasu wykonania, użyj opcji maxTimeMS, aby ustawić limit czasu wykonania tej operacji.
W ScaleGrid rozumiemy znaczenie tego przepływu pracy — dlatego wbudowaliśmy go w naszą konsolę administracyjną. Konsola administracyjna na stronie szczegółów klastra zapewnia dostęp do listy operacji na serwerze MongoDB:
Możesz także wybrać konkretną operację i zakończyć ją. Jak zawsze korzystaj z tej opcji dyskretnie: