Мониторинг "фоновых операций" MongoDB?
EDIT:
В основном я ищу некоторые подсказки о том, как понять, какие фоновые операции выполняются на моем экземпляре MongoDB, и, возможно, уменьшить/отключить их, когда это необходимо, чтобы они не мешали запускаемым тестам. Я пробовал mongostat
и mongotop
, но ничего не нашел с ними, что помогло мне понять, какие фоновые операции запущены и что их инициирует. db.currentOp()
последовательно возвращает пустой массив при запуске до начала моих тестов.
Я регулярно запускаю тесты при разработке с помощью node (мокка, огурец). Со вчерашнего дня около 25% времени инициализации сервера не удается подключиться к mongodb со следующей ошибкой:
**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)
Мы используем pow-mongodb-fixtures, чтобы очистить db и заполнить его некоторыми базовыми данными перед запуском тестов, где и происходит это. AFAIK ничего не изменилось, когда это началось. Любые идеи, в которых я могу даже начать исследовать источник этой ошибки?
Ответы
Ответ 1
Ну, я не собираюсь отмечать это как ответ, потому что я искал способ отслеживать происходящее и выяснять проблему через mongo db. Тем не менее, я выяснил эту проблему. Не самое полезное решение в мире, но оказалось, что мы асинхронно запускаем сервер, который будет запускать все схемы мангуста и тем самым проверять/воссоздавать все индексы, и более или менее одновременно я запускал код инвентаря, чтобы очистить мой коллекции.
Короче говоря, не пытайтесь удалять коллекции при создании на них индексов:)
Ответ 2
Другим в этом случае будет:
db.currentOp(true)
Задание истины включает операции с незанятыми соединениями и системными операциями.
Смотрите здесь: https://docs.mongodb.org/manual/reference/method/db.currentOp/