mongodb删除集合后磁盘空间不释放

 

mongodb删除集合后磁盘空间不释放,只有用db.repairDatabase()去修复才能释放。

但是在修复的过程中如果出现了非正常的mongodb的挂掉,再次启动时启动不了的,需要先修复才可以,可以利用./mongod --repair --dbpath=/data/mongo/ 如果你是把数据库单独的放在一个文件夹中指定dbpath时就指向要修复的数据库就可以,修复可能要花费很长的时间,在使用db.repairDatabase()去修复时一定要停掉读写,并且mongodb要有备机才可以,不然千万不要随便使用db.repairDatabase()来修复数据库,切记。

 

修复数据库的实际过程:将所有的文档导出然后马上导入,忽略那些无效的文档.完成以后,会重新建立索引.了解这一机制对理解修复的一些属性有帮助.数据量大的话,会花很多时间.因为所有数据都要验证,所有索引都要重建.修复后可能会比修复前少些文档,因为损毁的文档都被丢弃了.

 

 

MongoDB内部有预分配空间的机制,每个预分配的文件都用0进行填充,由于有了这个机制,MongoDB始终保持额外的空间和空余的数据文件,从而有效地避免了由于数据暴增而带来的磁盘压力过大的问题.

 

由于表中数据量的增加,数据文件每新分配一次,它的大小都会是上一个数据文件大小的2倍,每个数据文件最大2G.这样的机制有利于防止较小的数据库浪费过多的磁盘空间,同时又能保证较大的数据库有相应的预留空间使用.

 

修复数据库还能起到压缩数据的作用,限制的空间(比如删除体积较大的集合,或删除大量文档后腾出的空间)在修复后会被重新回收.

 

你可能感兴趣的:(mongodb)