2015-11-19 13 views
15

EDYCJA: Zasadniczo szukam wskazówek, jak zrozumieć, jakie operacje tła są uruchomione na mojej instancji MongoDB i ewentualnie zmniejszyć/wyłączyć je w razie potrzeby, tak aby nie zakłócać uruchamiania testów. Próbowałem już mongostat i mongotop, ale nie znalazłem nic z nimi, co pomogło mi zrozumieć, jakie operacje w tle są uruchomione i co je inicjuje. db.currentOp() konsekwentnie zwraca pustą tablicę po uruchomieniu, zanim zacznę wykonywać testy.Monitorowanie MongoDB "operacje w tle"?

Regularnie przeprowadzam testy podczas pracy z węzłem (mocha, ogórek). Od wczoraj, około 25% inicjowania serwera czasie błędu próbuje połączyć się MongoDB z powodu następującego błędu:

**Unhandled rejection MongoError: exception: cannot perform operation: a background operation is currently running for collection** somecollection 
    at Function.MongoError.create (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11) 
    at /somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:793:66 
    at bound (domain.js:254:14) 
    at runBound (domain.js:267:12) 
    at Callbacks.emit (.../node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:94:3) 
    at null.messageHandler (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:235:23) 
    at Socket.<anonymous> (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:294:20) 
    at Socket.emit (events.js:107:17) 
    at readableAddChunk (_stream_readable.js:163:16) 
    at Socket.Readable.push (_stream_readable.js:126:10) 
    at TCP.onread (net.js:538:20) 

Używamy POW-MongoDB-uchwyty, aby wyczyścić db i wypełnić go z niektórych podstawowych danych przed uruchomieniem testy , gdzie to się dzieje. AFAIK nic wielkiego się nie zmieniło, kiedy to się zaczęło. Jakieś pomysły, w których mogę zacząć szukać źródła tego błędu?

+1

check uruchomiony proces w tle przy użyciu db.currentOp(). W przypadku aktywnego procesu działającego w tle twój klient jest skonfigurowany do zgłaszania tego błędu. –

+0

To polecenie zawsze zwraca pustą tablicę. Prawdopodobnie do czasu, kiedy go uruchomię, zakończyła się "operacja w tle". Niemniej jednak czasami muszę uruchomić 3 lub 4 razy, aby ominąć ten błąd. – joniba

+0

Być może jesteś na dobrej drodze z 'db.currentOp()', ale może po prostu nie używasz go poprawnie. Ten artykuł jest bardziej szczegółowy; [Oglądanie i zabijanie aktualnie wykonywanych operacji w MongoDB] (https://masteringmean.com/lessons/104-Viewing-and-cilling-current-executing-operations- in-MongoDB) –

Odpowiedz

3

Twój przyjaciel w tym przypadku byłoby:

db.currentOp(true) 

Określanie prawda zawiera operacje na bezczynnych połączeń i operacji systemowych.

Zobacz tutaj: https://docs.mongodb.org/manual/reference/method/db.currentOp/

+0

Um, przeczytaj komentarze do pytania? – joniba

+0

Oczywiście, że zrobiłem, ale kontynuowałeś określanie uruchamiania db.currentOp() bez dodatkowego parametru, który mógł pomóc w twoim przypadku. W każdym razie, bardzo się cieszę, że twój problem został rozwiązany :) –

4

Cóż nie będę oznaczyć to jako odpowiedź, ponieważ szukałem sposobu, aby kontrolować, co się dzieje i dowiedzieć się problem przez Mongo db. Niemniej jednak wymyśliłem problem. Nie jest to najbardziej przydatne rozwiązanie na świecie, ale okazało się, że byliśmy asynchronicznie uruchamiając serwer, który uruchamiał wszystkie mangowe schematy, a tym samym sprawdzał/odtwarzał wszystkie indeksy, i mniej więcej jednocześnie uruchamiałem kod urządzeń, aby wyczyścić moje kolekcje.

W skrócie, nie próbuj usuwać kolekcje podczas tworzenia indeksów na nich :)