我有一个非常大的收藏集,请参见db.action_traces.stats()
的屏幕截图:
我运行db.action_traces.deleteMany({ "block_time": { "$lt": "2018-08-15T00:00:00.000Z" } })
和db.action_traces.deleteMany({ "block_time": { "$lt": "2018-09-01T00:00:00.000Z" } })
并得到以下结果:
{ "acknowledged" : true, "deletedCount" : 5151786 }
{ "acknowledged" : true, "deletedCount" : 16261351 }
但是当我再次运行db.action_traces.stats()
时,我得到以下结果"storageSize" : 630196023296
。因此,基本上,我删除了一大笔数据,但没有保存一点……这怎么可能?
我该怎么做以节省空间?
答案 0 :(得分:1)
MongoDB存储文件不会收缩-而是随着您继续添加更多数据而被重用的“漏洞”-至少,这就是它们在购买另一家公司之前与原始mongodb db引擎一起使用的方式/发动机。 无论如何,缩小文件的唯一方法是从头开始重新创建它们。如果您以副本集的形式运行,则可以关闭节点,删除文件并备份该节点-文件将被重新写入而没有存储漏洞。自从我完成这件事已经有几年了-在走这条路之前请先阅读文档。无论哪种方式,mongodb的存储都不会“缩小”,我记得那么多。
((我刚刚再次查看了您的屏幕截图,发现您正在使用新的有线Tiger db引擎?我的回答是指“原始”的wiredtiger之前的行为-但也许与新引擎中的行为相同)也是
答案 1 :(得分:1)
https://docs.mongodb.com/manual/reference/command/compact/:
在WiredTiger上,紧凑尝试减少集合中数据和索引所需的存储空间,从而将不必要的磁盘空间释放给操作系统。此操作的有效性取决于工作负载,并且无法恢复任何磁盘空间。如果您已从集合中删除了大量数据并且不打算替换它,则此命令很有用。
紧凑型可能需要更多磁盘空间才能在WiredTiger数据库上运行。
因此对于您的收藏,它必须是
db.runCommand ( { compact: 'action_traces' } )