gpt4 book ai didi

MongoDB copyDatabase 在前台而非后台运行索引创建

转载 作者:可可西里 更新时间:2023-11-01 10:34:21 25 4
gpt4 key购买 nike

我有 700M 行/1.3TB MongoDB 实例,版本 1.6.3。我尝试使用 copyDatabase 命令将其复制到新的 2.0 实例。

“只是复制”用了 2 小时完成。但在那之后,新的 MongoDB 集合被锁定并且 db.currentOp() 返回以下结果。

{
"opid" : 5,
"active" : true,
"lockType" : "write",
"waitingForLock" : false,
"secs_running" : 22138,
"op" : "query",
"ns" : "nerv",
"query" : {
"copydb" : 1,
"fromhost" : "<some host>",
"fromdb" : "<some db>",
"todb" : "<some db>"
},
"client" : "127.0.0.1:50689",
"desc" : "conn",
"threadId" : "0x7f5094005700",
"connectionId" : 1,
"msg" : "index: (2/3) btree bottom up 214887968/715742197 30%",
"progress" : {
"done" : 214887968,
"total" : 715742197
},
"numYields" : 5591738
},

我等了大约 5 个小时,看来这不会在 24 小时内结束。我必须等待这个还是有其他选择? (就像在后台运行索引创建一样,与 ensureIndex 一样)


已添加)感谢您的回答,Adam C。然后我想问您更多:)

  1. index: (2/3) btree bottom up 在做什么,为什么这么慢?
  2. 我还没有遇到 index: (3/3) 消息。 (3/3)(2/3) 一样慢吗?

最佳答案

除了次要的问题,索引构建可以在后台完成,但我认为不能作为副本的一部分:

http://www.mongodb.org/display/DOCS/Indexing+as+a+Background+Operation

您可以 fsync 并锁定(或暂时关闭)1.6.3 数据库,然后复制数据文件。文件格式在 1.6.3 和 2.0.6 之间没有变化,所以如果您启动 2.0.6 实例并将其指向复制文件的适当路径,您应该可以继续了。

就后续作品而言,这有点超出我目前的知识范围,但我会尝试找出答案。我可以说相关代码在这里:

https://github.com/mongodb/mongo/blob/master/src/mongo/db/index_update.cpp#L219

看起来您正处于创建实际索引数据结构的 btree 构建阶段(在读取/插入之后)阶段,最后一 block 与提交相关。此处很难确定确切的时间,但如果您已经运行了一段时间,很可能值得让它完成。

如果这是我的选择,我会有一个 B 计划并并行运行数据文件的副本,假设这是可能的。如果索引构建先完成,则终止文件传输。

更新:我在研究另一个问题时意识到,当被索引的集合比 RAM 大得多时,最高 2.0.6 的版本中存在一个错误。它表现为前台索引的第 2 阶段(您正在做的事情)花费了很长时间,并且页面错误率大幅增加。

该错误已在 2.0.7 中修复(截至撰写此答案时,可作为候选发布版使用)。所以,如果其他人遇到这个问题,或者最初的问题所有者遇到这个问题,请确保您尝试使用 2.0.7+

关于MongoDB copyDatabase 在前台而非后台运行索引创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11649767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com