Gridfs 上的 Mongodump 正在杀死主机 IO

Gridfs 上的 Mongodump 正在杀死主机 IO

我正在尝试在生产运行时从我们的生产 mongodb 中创建 mongodump。

我们有三个生产实例,一个是常规的 mongodb,一个在 gridfs 上只有很少几 GB 的数据,一个在 gridfs 上有大量的数据。所有 mongodb 实例都在 ubuntu 10.04 虚拟服务器上以 2.4.9 版本运行。

我使用 mongodump 命令将数据库导出到另一台服务器。

不幸的是我们的机器实际上托管在一个“低性能”数据中心(基于 vmware),所以当我尝试导出大型 gridfs db 时,磁盘 IO 达到 100%(并且 50% 的 CPU 也开始等待 IO)。

这对生产应用程序产生了非常负面的影响,因为数据库访问时间过度增加,导致应用程序无法使用。

我正在寻找一种方法来调节 mongodump,以便导​​出速度更慢但在硬件资源上更凉爽,从而为应用程序提供更好的运行性能。

有谁遇到过类似的情况吗?

答案1

没有办法限制读取 - 而这就是全部mongodump操作,单次读取遍历您要转储的数据库的 _id 索引,然后以 BSON 格式写出数据。您看到的 IO 影响是因为它必须将数据分页到内存中才能读取(所有读取都是这种情况)。

至于建议,我想到以下几件事可能会有所帮助:

  1. 指向mongodump次要的而不是主要的
  2. 从集合中取出一个辅助节点(将其关闭),并使用它来获取数据的副本

第一个选项将隔离对辅助数据库的影响,然后它可能会在复制中落后并必须赶上,但除非您使用辅助读取,否则不会对您的应用程序产生影响。

如果您使用二次读取,那么您将看到对应用程序的影响。这就是第二个选项的作用所在 - 这意味着获取稍微“陈旧”的数据版本(但无论如何,只要您在之后写入任何内容,情况就会如此mongodump),但通过关闭它并将其从集合中取出,您可以保证不会对您的应用程序产生影响。您也可以直接获取数据文件并直接使用它们 - 无需mongodump(这通常要快得多)。

相关内容