mongodb磁盘空间过大

时间:2012-08-18 11:02:21

标签: mongodb

我的mongodb需要114g,这是我磁盘的85%

尝试使用db.repairDatabase()释放一些空间将失败,因为我没有足够的可用空间

我知道我的数据不应该占用太多空间,因为我曾经拥有占据90%磁盘的大集合。

然后我删除了这个集合并重新插入了20%的数据。

我如何释放一些空间?

1 个答案:

答案 0 :(得分:10)

MongoDB的数据存储磁盘空间为preallocated,只能通过使用新的预分配文件重建数据库来回收。通常,这是通过db.repairDatabase()或备份&恢复。正如您所指出的,修复需要足够的空间来创建数据库的新副本,因此可能不是一种选择。

以下是一些可能的解决方案,但都涉及在其他地方提供一些可用空间:

  • 如果该mongodump数据库有足够的可用空间,您可以mongodump,删除,mongorestoredb.dropDatabase()将删除磁盘上的数据文件。

  • 如果您使用的是LVMZFS等卷管理器,则可以为逻辑卷添加额外的磁盘空间,以便修复或转储&恢复数据库。

  • 如果您有其他服务器,则可以设置replica set来同步数据,而不会关闭当前服务器(这将是副本集中的“主要”服务器)。将数据同步到辅助服务器后,您可以逐步关闭原始主数据库并重新同步数据库。

请注意,对于副本集,您至少需要三个节点..因此要么是三个数据节点,要么是两个数据节点加上arbiter。在生产环境中,仲裁器通常在第三台服务器上运行,因此如果当前主服务器不可用,它可以允许任一数据节点成为主服务器。在回收磁盘空间方案中,可以在其中一个服务器上运行仲裁器(可能是新服务器)。

副本集对于管理目的通常非常有用,因为它们允许您在服务器可用于您的应用程序的同时降级服务器以进行维护(例如运行数据库压缩或修复)。它们还具有其他好处,例如维护数据的冗余副本以进行自动故障转移/恢复。