我有一个单主机数据库,在我不看的时候,它占据了95%的磁盘空间。为了解决这种情况,我创建了一个自动从最大集合中删除旧记录的进程,因此数据使用率降低到磁盘空间的大约40%。我认为只要数据大小不会接近预分配文件的大小,我就是安全的,但一周后我被证明是错误的:
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
会有帮助吗?如果是的话,我应该定期运行它吗?如何判断我何时应该运行它?
更新:我想我错过了一些基本的东西......有人可以详细说明数据文件,范围,集合和数据库之间的连接,以及在需要时如何分配空间?
答案 0 :(得分:2)