加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB释放空间的方法是什么,你了解几许?

发布时间:2022-04-22 10:51:40 所属栏目:系统 来源:互联网
导读:MongoDB释放空间的方法是什么?在使用MongoDB时,一些删除文件依然会占用MongoDB空间,那么我们要怎么将释放这部分空间空间呢?下面给大家分享几个MongoDB释放空闲空间方法。 当我们从MongoDB中删除文档或集合时,MongoDB并不会将已经占用了的磁盘空间释放,
       MongoDB释放空间的方法是什么?在使用MongoDB时,一些删除文件依然会占用MongoDB空间,那么我们要怎么将释放这部分空间空间呢?下面给大家分享几个MongoDB释放空闲空间方法。
 
       当我们从MongoDB中删除文档或集合时,MongoDB并不会将已经占用了的磁盘空间释放,它会一直维护已经占用了磁盘空间的数据文件,尽管数据文件中可能存在大大小小的空记录列表(empty record list)。当客户端程序再次插入文档时,MongoDB会从空记录列表中分配存储空间给新文档。那么为了更加有效的使用磁盘空间,我们需要对mongodb的数据文件做碎片整理以及未使用空间的回收。思想无非两种:
       1、对原数据进行重组
       2、仅将数据复制出来,形成仅数据的完整备份
 
       以下介绍几种常用的实施方法:
 
       1、compact
       2、db.repairDatabase()
       3、secondary节点重同步
       4、db.copyDatabase()
       一、compat
 
       注意事项
 
       1、在执行命令前请保证你有比较新的备份
       2、在使用MMAPv1存储引擎的MongoDB上compact需要数据文件所在分区至少有2G的空闲空间
       3、在使用WiredTiger存储引擎的MongoDB上,compact命令将重写集合和索引,且释放未使用的空间,但使用MMAPv1存储引擎的MongoDB上,该命令只对集合的数据文件进行碎片整理并重新创建其索引。不会释放空间,在使用MMAPv1存储引擎的MongoDB上回收空间,建议使用第三种方法“secondary节点重同步”
       4、使用MMAPv1存储引擎的MongoDB中的Capped Collections,是无法被压缩的,但使用WiredTiger存储引擎的MongoDB在执行compact时会进行压缩。
       5、在副本集上运行该命令时,要分别在每个节点执行
       6、该命令只能在mongod实例上执行,不能再mongos实例上运行。也就是说针对分片集群的compact操作要分别在每个分片节点上执行。
       7、一般该命令运行在secondary节点上,在执行时,会强制节点进入RECOVERING状态,RECOVERING状态的实例读写操作将被阻塞
       8、再碰到特殊情况要停止运行该命令时,可通过db.currentOp()查询进程信息,然后通过db.killOp()干掉进程
       9、compact可能会增加数据文件的总大小和数量,尤其是第一次运行时。但这不会增加总集合使用的磁盘空间,因为存储大小是数据库文件中分配的数据量,而不是文件系统上文件的大小/数量
       10、使用MMAPv1存储引擎的MongoDB中的Capped Collections,是无法被压缩的,但使用WiredTiger存储引擎的MongoDB在执行compact时会进行压缩。
       二、db.repairDatabase()
 
       官网该命令的定义:通过丢无效或损坏的数据老重建数据库和索引。类似于文件系统修复命令fsck。所以此命令主要是用于修复数据。
 
       使用方法
 
use yourdatabase;
db.repairDatabase();
       注意事项
 
       1、db.repairDatabase()主要用于修复数据。若你拥有数据的完整副本,且有权限访问,请使用第三种方法“secondary节点重同步”
       2、在执行命令前请保证你有比较新的备份
       3、此命令会完全阻塞数据库的读写,谨慎操作
       4、此命令执行需要数据文件所在位置有等同于所有数据文件大小总和的空闲空间再加上2G
       5、在使用MMAPv1存储引擎的secondary节点上执行该命令可以压缩集合数据
       6、在使用WiredTiger存储引擎的MongoDB库上执行不会有压缩的效果
       7、再碰到特殊情况要停止运行该命令时,可通过db.currentOp()查询进程信息,然后通过db.killOp()干掉进程
       8、非常消耗时间
       三、secondary节点重同步
 
       主要思想就是:删除secondary节点中指定数据,使之与primary重新开始数据同步。当副本集成员数据太过陈旧,也可以使用重新同步。数据的重新同步与直接复制数据文件不同,MongoDB会只同步数据,因此重同步完成后的数据文件是没有空集合的,以此实现了磁盘空间的回收。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读