web-dev-qa-db-ja.com

インデックス作成ジョブのmongodbステータス

私はMongoDBを使用しており、約7,500万レコードのコレクションがあります。次のコマンドを使用して、2つの「フィールド」に複合インデックスを追加しました。

_db.my_collection.ensureIndex({"data.items.text":1, "created_at":1},{background:true}).
_

2日後、インデックス作成のステータスを確認しようとしています。 db.currentOp()を実行すると_{}_が返されますが、別のインデックスを作成しようとすると、次のエラーメッセージが表示されます。

_cannot add index with a background operation in progress.
_

インデックス作成ジョブのステータス/進行状況を確認する方法はありますか?

追加すべきことの1つ-私はmongodbバージョン2.0.6を使用しています。ありがとう!

28
Yair Avgar

Mongoシェルで、以下のコマンドを入力して現在の進行状況を表示します。

rs0:PRIMARY> db.currentOp(true).inprog.forEach(function(op){ if(op.msg!==undefined) print(op.msg) })

Index Build (background) Index Build (background): 1431577/55212209 2%
22
Bajal

currentOptrue引数とともに使用して、アイドル接続やシステム操作などのより詳細な出力を返すことができます。

db.currentOp(true)

...そして、db.killOp()を使用して、目的の操作を強制終了できます。

11
CesarTrigo

残念ながら DR9885 答えは私にとってうまくいきませんでした。投稿されたコードにスペースが含まれ(構文エラー)、スペースが削除されても何も返されません。

これはMongo Shell v3.6.0

db.currentOp().inprog.forEach(function(op){ if(op.msg) print(op.msg) })

私が投稿した後まで Bajal の回答を読んでいませんでしたが、コードが少し短くて機能することを除いて、ほとんど同じです。

7
octohedron

以下は、インデックスの進行状況を出力するはずです。

db
  .currentOp({"command.createIndexes": { $exists : true } })
  .inprog
  .forEach(function(op){ print(op.msg) })

出力:

Index Build (background) Index Build (background): 5311727/27231147 19%
6
DR9885

好き:

db.currentOp({ 
    'msg' :{ $exists: true },
    'command': { $exists: true },
    $or: [ 
        { 'command.createIndexes': { $exists: true } }, 
        { 'command.reIndex': { $exists: true } }
    ]
}).inprog.forEach(function(op) { 
    print(op.msg); 
});

出力例:

インデックスビルドインデックスビルド:84826/335739 25%

ドキュメントは示唆しています:

db.adminCommand(
    {
      currentOp: true,
      $or: [
        { op: "command", "command.createIndexes": { $exists: true }  },
        { op: "none", "msg" : /^Index Build/ }
      ]
    }
)

アクティブなインデックス作成操作の例

0
FPC