0
我有一个单主机数据库,当我没有看时,它长大到95%的磁盘空间。为了纠正这种情况,我创建了一个自动从最大集合中删除旧记录的过程,因此数据使用率下降到磁盘空间的大约40%。我想我是安全的,只要数据大小的预分配文件的大小接近不长,但一个星期后,我被证明是错误的:为什么MongoDB存储不断增加?
Wed Jan 23 18:19:22 [FileAllocator] allocating new datafile /var/lib/mongodb/xxx.101, filling with zeroes...
Wed Jan 23 18:25:11 [FileAllocator] done allocating datafile /var/lib/mongodb/xxx.101, size: 2047MB, took 347.8 secs
Wed Jan 23 18:25:14 [conn4243] serverStatus was very slow: { after basic: 0, middle of mem: 590, after mem: 590, after connections: 590, after extra info: 970, after counters: 970, after repl: 970, after asserts: 970, after dur: 1800, at end: 1800 }
这是db.stats()
输出:(注意数字在MB由于规模)
> db.stats(1024*1024)
{
"db" : "xxx",
"collections" : 47,
"objects" : 189307130,
"avgObjSize" : 509.94713418348266,
"dataSize" : 92064,
"storageSize" : 131763,
"numExtents" : 257,
"indexes" : 78,
"indexSize" : 29078,
"fileSize" : 200543,
"nsSizeMB" : 16,
"ok" : 1
}
问:我能做些什么,以从分配新的数据文件停止MongoDB的?
运行repair
是困难的,因为我将不得不安装新磁盘。运行compact
有帮助吗?如果是的话,我是否应该定期运行它,如何知道我应该运行它?
更新:我想我失去了一些东西在这里根本......可能有人请详细说明数据文件,范围,集合和数据库,以及之间的连接是如何在需要时空间分配?
您可能想要添加一些关于您的应用正在做什么的细节。 Mongo在不再使用时不会自动释放存储空间。它将在某些情况下取代现有的记录,否则它会消耗更多的磁盘。 – Rich
它基本上只是写日志和图表数据,一旦它太旧就删除它。但是,我无法使用加盖集合,因为我需要控制清除了多少数据以及要删除哪些数据。 – johndodo
您使用的是哪个版本的mongodb? – Gregor