2015-11-19 17 views
15

EDIT: 基本的には、私のMongoDBインスタンスでどのようなバックグラウンド操作が実行されているかを理解するためのヒントを探しており、実行中のテストを妨げないように必要に応じて減らしたり無効にしたりします。私はmongostatmongotopを試しましたが、どのバックグラウンド操作が実行されているのか、何が開始しているのかを理解するのに役立つものは見つかりませんでした。 db.currentOp()は、テストの実行を開始する前に、実行時に一貫して空の配列を返します。MongoDBの "バックグラウンド操作"の監視?

定期的にノード(モカ、キュウリ)で開発中のテストを実行します。昨日以来、サーバーの初期化は、次のエラーでのMongoDBに接続しようとして失敗した時間の約25%:

**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の-器具を使用しますこれが起こっている場所です。これが起き始めると、AFAIKは何も変わっていません。私はこのエラーの原因を調べ始めることができるすべてのアイデアですか?

+1

db.currentOp()を使用してバックグラウンドプロセスを確認してください。アクティブバックグラウンドプロセスの場合、クライアントはこのエラーをスローするように構成されます –

+0

このコマンドは常に空の配列を返します。おそらく、私がそれを実行する時には、「バックグラウンド操作」が完了したでしょう。それでも、このエラーを回避するには、3〜4回実行する必要があることがあります。 – joniba

+0

'db.currentOp()'と正しい軌道に乗っているかもしれませんが、正しく使用していないかもしれません。この記事ではさらに詳しく解説します。 [MongoDBで現在実行されている操作の表示と終了](https://masteringmean.com/lessons/104-閲覧と書き込み - 現在の操作 - 操作-in-MongoDB) –

答えて

3

この場合、あなたの友人は次のようになります。

db.currentOp(true) 

はtrueを指定すると、アイドル状態の接続やシステム運用上の操作が含まれます。

はこちらをご覧ください:https://docs.mongodb.org/manual/reference/method/db.currentOp/

+0

um、質問にコメントを読んで? – joniba

+0

もちろん、私はそうしましたが、あなたの場合に役立つかもしれない余分なパラメータなしでdb.currentOp()を実行することを指定し続けました。とにかく、あなたの問題を聞いて非常にうれしいです:) –

4

まあ、私は何が起こっているかを監視し、モンゴDBを通して問題を把握するための方法を探していたので、答えとしてこれをマークするつもりはありません。それにもかかわらず、私は問題を把握しました。世界でもっとも役に立つソリューションではありませんが、非同期的にサーバーを起動して、すべてのマングーススキーマを実行し、すべてのインデックスをチェック/再作成することが判明しました。コレクション。

要するに、インデックスを作成中にコレクションを削除しようとしないでください:)