首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >移动一个非常大的MongoDB数据库

移动一个非常大的MongoDB数据库
EN

Stack Overflow用户
提问于 2017-09-03 18:05:23
回答 1查看 3K关注 0票数 2

试图移动一个拥有1亿多个文档的MongoDB数据库。将其从AWS中的服务器移到GCP中的服务器。试过了mongodump --它成功了,但是mongorestore一直在犯错误-

代码语言:javascript
运行
复制
error running create command: 24: Too many open files

这是如何做到的呢?

不希望通过在AWS服务器上创建脚本进行传输,以获取每个文档并推送到GCP服务器上的API端点,因为这将花费太长的时间。

编辑(添加更多细节)已经尝试将ulimit -n设置为无限。不工作,因为GCP有一个无法修改的硬编码限制。

EN

回答 1

Stack Overflow用户

发布于 2017-09-03 18:40:42

看起来您正在为您的用户命中ulimit。这可能是下列部分或全部的一个功能:

  • 您的用户拥有默认的ulimit (可能是256或1024,取决于操作系统)
  • 由于您的数据库的大小,MongoDB使用内存映射文件可能会在恢复过程中导致大量打开的文件
  • 运行mongorestore的方式可以增加并发性,从而增加并发打开的文件句柄的数量。

您可以通过调用ulimit -n <some number>来增加当前shell的限制,从而解决用户允许的打开文件数。您选择的数字不能超过在主机上配置的硬限制。您也可以永久地更改ulimit,更详细的here。这是的根本原因修复,但是您更改ulimit的能力可能受到AWS的限制,因此您可能希望通过调整以下设置来减少mongorestore进程的并发性:

--numParallelCollections整型 违约:4 应该并行地恢复集合的数量。 --numInsertionWorkersPerCollection整型 违约:1 指定每个集合同时运行的插入工作人员数。

如果为这些值选择了1以外的值,则可以通过如下设置来减少并发性(以及并发打开的文件句柄的数量):

代码语言:javascript
运行
复制
--numParallelCollections=1 --numInsertionWorkersPerCollection=1   

当然,这将增加恢复过程的运行时间,但它可能允许您潜入当前配置的ulimit。不过,只是重申一下;根本原因是增加ulimit

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46026377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档