可能大错特错。“db.repairDatabase()”究竟是做什么的?蒙古数据库

eph*_*amd 5 mongodb mongodb-query

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

我已经看了几分钟磁盘,我看到它有所不同,但它不会释放大空间,甚至不会释放 1 mb。这很奇怪。

我读过"remove"如果它没有简单地标记它可以被删除或覆盖,它实际上并不会删除光盘。是真的?

这对我来说似乎很有意义。所以,我一直在寻找能够真正释放空间的东西......

我已经申请了repairDatabase(),但我认为我做错了。 一切都被封锁了!

我试过运气,我已经重新启动了服务器。 有一个 MongoDB 服务正在运行,但其状态保持在“正在启动”(未运行)中。

我正在从repairDatabase()需要两倍于数据库原始大小的空间的其他站点读取数据,但它没有。

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

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

kev*_*adi 3

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

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

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

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