mongodb索引创建作业的状态

wqnecbli  于 2023-01-04  发布在  Go
关注(0)|答案(7)|浏览(172)

我使用MongoDB,有一个大约7500万条记录的集合,我使用以下命令在两个“字段”上添加了一个复合索引:

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

两天后,我试图查看索引创建的状态,运行db.currentOp()返回{},但是当我试图创建另一个索引时,我得到了这个错误消息:

cannot add index with a background operation in progress.

是否有办法检查索引创建作业的状态/进度?
有一点需要补充--我使用的是mongodb版本2. 0. 6。谢谢!

cedebl8k

cedebl8k1#

在mongo shell中,输入以下命令查看当前进度:

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%

要进行实时运行状态日志:

> while (true) { db.currentOp(true).inprog.forEach(function(op){ if(op.msg!==undefined) print(op.msg) }); sleep(1000); }
Index Build: scanning collection Index Build: scanning collection: 43687948/47760207 91%
Index Build: scanning collection Index Build: scanning collection: 43861991/47760228 91%
Index Build: scanning collection Index Build: scanning collection: 44993874/47760246 94%
Index Build: scanning collection Index Build: scanning collection: 45968152/47760259 96%
monwx1rj

monwx1rj2#

您可以使用带有true参数的 currentOp,它会返回更详细的输出,包括空闲连接和系统操作。

db.currentOp(true)

...然后您可以使用 db.killOp() 终止所需的操作。

falq053o

falq053o3#

以下内容应打印出索引进度:

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

产出:

Index Build (background) Index Build (background): 5311727/27231147 19%
roejwanj

roejwanj4#

不幸的是,DR9885答案对我不起作用,它在代码中有空格(语法错误),即使删除空格,它也不会返回任何结果。
此功能适用于Mongo Shell v3.6.0

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

直到我发布了我的答案后才读到Bajal的答案,但它几乎完全相同,只是代码略短,而且也能正常工作。

yqlxgs2m

yqlxgs2m5#

我喜欢:

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/ }
      ]
    }
)

活动索引操作示例。

d5vmydt9

d5vmydt96#

简单的一个只是检查进展的一个单一的索引正在进行:

db.currentOp({"msg":/Index/}).inprog[0].progress;

产出:

{ "done" : 86007212, "total" : 96868386 }
fcipmucu

fcipmucu7#

查找索引作业的进度,漂亮的一行代码:

> db.currentOp().inprog.map(a => a.msg)
[
    undefined,
    undefined,
    undefined,
    undefined,
    undefined,
    undefined,
    "Index Build: scanning collection Index Build: scanning collection: 16448156/54469342 30%",
    undefined,
    undefined
]

相关问题