web-dev-qa-db-fra.com

état mongodb du travail de création d'index

J'utilise MongoDB et j'ai une collection avec environ 75 millions d'enregistrements. J'ai ajouté un index composé sur deux "champs" en utilisant la commande suivante:

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

Deux jours plus tard, j'essaie de voir l'état de la création de l'index. L'exécution de db.currentOp() renvoie {}, Mais lorsque j'essaie de créer un autre index, je reçois ce message d'erreur:

cannot add index with a background operation in progress.

Existe-t-il un moyen de vérifier l'état/la progression du travail de création d'index?

Une chose à ajouter - j'utilise mongodb version 2.0.6. Merci!

28
Yair Avgar

Sur le shell mongo, tapez la commande ci-dessous pour afficher la progression actuelle:

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

Vous pouvez utiliser currentOp avec un argument true qui renvoie une sortie plus détaillée, y compris les connexions inactives et les opérations système.

db.currentOp(true)

... et vous pouvez ensuite utiliser db.killOp () pour tuer l'opération souhaitée.

11
CesarTrigo

Malheureusement, DR9885 la réponse n'a pas fonctionné pour moi, il a des espaces dans le code posté (erreur de syntaxe) et même si les espaces sont supprimés, cela ne renvoie rien.

Cela fonctionne à partir de Mongo Shell v3.6.0

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

N'a pas lu Bajal réponse jusqu'à ce que j'aie posté le mien, mais c'est presque exactement la même chose sauf que c'est un code légèrement plus court et fonctionne également.

7
octohedron

Les informations suivantes doivent imprimer la progression de l'index:

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

les sorties:

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

J'aime:

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

Exemple de sortie:

Construction de l'index Construction de l'index: 84826/335739 25%

La documentation suggère:

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

exemple des opérations d'indexation actives .

0
FPC