我试图在生产运行时从我们的生产mongodb中制作一个mongodump。
我们有三个生产实例,一个是正常的mongodb,一个在gridfs上的数据量很less,一个在gridfs上的数据量很大。 所有mongodb实例在ubuntu 10.04虚拟服务器上运行于2.4.9版本。
我使用mongodump命令将基地导出到另一台服务器。
不幸的是,我们的机器实际上是托pipe在一个“低性能”数据中心(基于VMware的),所以当我尝试导出大型网格数据库时,磁盘IO达到100%(并且50%的cpu也开始等待IO)。
这对生产应用程序有非常不利的影响,因为db访问时间过度增加,使应用程序无法使用。
我正在寻找一种方法来调节mongodump,因此出口在硬件资源上变得更慢但更冷,从而为应用程序提供更好的性能。
有没有人有类似的情况?
没有办法扼杀读 – 这就是所有mongodump正在做的,一个单一的阅读,走你的转储数据库的_id索引,然后写出数据在BSON格式。 您看到的IO影响是因为它必须将数据分页到内存中才能读取(所有读取都是这种情况)。
在build议方面,我可以想一些可能有所帮助的事情:
mongodump在次要而不是主要的 第一个选项将隔离对次要的影响,然后它可能落后于复制,并且必须赶上,但是除非您正在使用二次读取,否则将不会影响您的应用程序。
如果您正在使用二级读取,那么您将看到对应用程序的影响。 这就是第二个选项的mongodump – 这意味着要得到一个稍微“陈旧”的数据版本(但是,只要您在mongodump之后写入任何东西,情况就会如此),但是closures它并将其从设置你保证没有影响到你的应用程序。 你也可以直接使用数据文件并直接使用它们 – 不需要mongodump (这通常要快得多)。