可能是大错。究竟是什么" db.repairDatabase()"做? MongoDB的

时间:2017-10-23 16:06:57

标签: mongodb mongodb-query

我有一个拥有数百万用户的mongodb数据库。 我想释放空间,我创建了一个机器人来删除超过6个月的非活动用户。

我一直在看磁盘几分钟 而且我已经看到它变化多了但它不会释放大空间,甚至不会释放1 mb。这很奇怪。

我已经读过Files in Previous Search Result实际上并没有删除光盘,如果它不是简单地标记它可以被删除或覆盖。这是真的吗?

这对我来说似乎很有意义。所以,我已经找到了一些迫使空间真正释放的东西......

我已经申请了"remove",我认为我做错了。 一切都被封锁了!

我试过了运气,我重新启动了服务器。 MongoDB服务正在运行,但其状态保持在" Starting" (没有跑步)。

我从其他网站上读到repairDatabase()所需的空间是数据库原始大小的两倍,但它没有。

我不知道,在做什么,这可能在几个小时,几天......

数据库丢失了吗?我想我会停止所有服务并删除数据库。

1 个答案:

答案 0 :(得分:1)

repairDatabasefsck类似。也就是说,它会尝试清理任何可能阻止MongoDB启动的任何损坏文档的数据库。它的详细工作方式因您的存储引擎而异,但repairDatabase 可能会从数据库中删除文档

在MongoDB文档页面中清楚地概述了该命令的详细信息(包括所有警告):https://docs.mongodb.com/manual/reference/command/repairDatabase/

我建议下次最好先阅读官方文档,而不是阅读人们在论坛上说的内容。像这样的二手信息可能已经过时,或者说是完全错误的。

话虽如此,您应该让进程一直运行直到完成,并在无法启动数据库时执行任何故障排除。 可能需要2倍的数据磁盘空间,但命令也可能需要时间才能完成。