私は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を使用しています。ありがとう!
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%
currentOpをtrue引数とともに使用して、アイドル接続やシステム操作などのより詳細な出力を返すことができます。
db.currentOp(true)
...そして、db.killOp()を使用して、目的の操作を強制終了できます。
以下は、インデックスの進行状況を出力するはずです。
db
.currentOp({"command.createIndexes": { $exists : true } })
.inprog
.forEach(function(op){ print(op.msg) })
出力:
Index Build (background) Index Build (background): 5311727/27231147 19%
好き:
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/ }
]
}
)