mongodb删除集合后磁盘空间不释放,只有用db.repairDatabase()去修复才能释放。
但是在修复的过程中如果出现了非正常的mongodb的挂掉,再次启动时启动不了的,需要先修复才可以,可以利用./mongod --repair --dbpath=/data/mongo/ 如果你是把数据库单独的放在一个文件夹中指定dbpath时就指向要修复的数据库就可以,修复可能要花费很长的时间,在使用db.repairDatabase()去修复时一定要停掉读写,并且mongodb要有备机才可以,不然千万不要随便使用db.repairDatabase()来修复数据库,切记。
修复数据库的实际过程:将所有的文档导出然后马上导入,忽略那些无效的文档.完成以后,会重新建立索引.了解这一机制对理解修复的一些属性有帮助.数据量大的话,会花很多时间.因为所有数据都要验证,所有索引都要重建.修复后可能会比修复前少些文档,因为损毁的文档都被丢弃了.
MongoDB内部有预分配空间的机制,每个预分配的文件都用0进行填充,由于有了这个机制,MongoDB始终保持额外的空间和空余的数据文件,从而有效地避免了由于数据暴增而带来的磁盘压力过大的问题.
由于表中数据量的增加,数据文件每新分配一次,它的大小都会是上一个数据文件大小的2倍,每个数据文件最大2G.这样的机制有利于防止较小的数据库浪费过多的磁盘空间,同时又能保证较大的数据库有相应的预留空间使用.
修复数据库还能起到压缩数据的作用,限制的空间(比如删除体积较大的集合,或删除大量文档后腾出的空间)在修复后会被重新回收.
分享到:
相关推荐
然而,当我们在MongoDB中删除文档或集合后,MongoDB不会立即释放这些已占用的磁盘空间,而是保留空记录列表供后续插入操作使用。这可能导致磁盘空间利用率低下,尤其是在频繁进行增删改操作的环境中。为了优化空间...
在实际运营中,数据的增删改查是常态,但MongoDB在删除数据后并不会立即回收磁盘空间,这可能导致磁盘空间逐渐被浪费。本实例将详细解释如何在MongoDB集群中进行数据目录重构,以释放已被删除数据所占用的磁盘空间。...
当需要分配新的盘区时,MongoDB会检查$freelist命名空间,这是一个特殊的空间,用于记录已被释放(如删除的集合或索引)的盘区。如果$freelist中有合适大小的盘区,MongoDB会优先复用这些空间,以提高资源利用率。 ...
`db.repairDatabase()` 由于上述删除操作并未立即释放磁盘空间,`fs.chunks`集合中的数据块可能仍然存在。运行`repairDatabase`命令可以整理数据库,回收不再使用的空间。注意,这会锁定整个数据库,消耗大量内存和...
3. 数据导出再导入:通过`mongodump`和`mongorestore`工具,可以将数据导出后再导入,这个过程会重建索引并清理已删除数据的空间。这有助于释放被占用的磁盘空间。 4. 定期删除无用数据:针对Ceilometer的具体场景...
同时,如果物理内存不足,操作系统会执行交换操作(swap-out),将不常用的数据换出到磁盘,释放物理内存空间。 MongoDB的存储模型基于这种内存映射文件机制,使得数据库的读写操作只需要与虚拟内存交互,而数据的...
* `drop` 方法:删除集合所有的数据和索引,释放磁盘空间,例如 `db.<collection>.drop()`。 * `dropDatabase` 方法:删除数据库,释放磁盘空间,例如 `db.dropDatabase()`。 读取(Read) * `find` 方法:返回 ...
当Redis内存达到配置的阈值时,它会根据一定的策略删除部分数据来释放内存空间。 - **分区的原因**:通过分区可以有效地利用多台机器的内存资源,提高系统的整体吞吐量和计算能力。同时,分区还可以帮助解决单机内存...
- 文件删除不会立即释放磁盘空间,因为MongoDB会等待垃圾回收机制清理已删除的文件块。定期运行`db.fs.files.deleteMany()`和`db.fs.chunks.deleteMany()`可以手动清理。 6. 应用场景: - 大规模文件存储:适用于...
### Java笔试面试题解答知识点详解 ...垃圾回收机制自动管理内存,释放不再使用的对象占用的空间。 以上知识点涵盖了Java笔试面试题中的核心内容,对于准备面试的开发者来说是非常有价值的参考资料。
也可以是非关系型的,如MongoDB、Redis等。 2. **数据库管理系统(DBMS)**:是用于创建和管理数据库的软件。它提供了用户与物理数据库之间的接口,使得用户可以通过SQL等语言来查询和操作数据。 3. **信息系统...