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

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

mognodb 在删除数据的情况下不释放占用的磁盘空间,即使drop collection也不行,除非drop database。
即,mongodb占用内存为10G时,删除8G数据后,数据文件占用空间大小仍是10G。"df"命令查看内存占用没有变化。
 
平时可以通过mongo命令行来监控MongoDB的内存使用情况,如下所示:
mongo> db.serverStatus().mem
{
"resident" : 22346,
"virtual" : 1938524,
"mapped" : 962283
}还可以通过mongostat命令来监控MongoDB的内存使用情况,如下所示:
shell> mongostat
mapped vsize res faults
940g 1893g 21.9g 0
其中内存相关字段的含义是:
mapped:映射到内存的数据大小
visze:占用的虚拟内存大小
res:占用的物理内存大小
注:如果操作不能在内存中完成,结果faults列的数值不会是0,视大小可能有性能问题。
在上面的结果中,vsize是mapped的两倍,而mapped等于数据文件的大小,所以说vsize是数据文件的两倍,
之所以会这样,是因为本例中,MongoDB开启了journal,需要在内存里多映射一次数据文件,如果关闭journal,
则vsize和mapped大致相当。
 
1.验证删除数据后用db.serverStatus().mem命令查看的内存占用是否变化:
查看mongo内存占用:
 
查看系统内存占用:
 
使用脚本向mongo插入大量数据。
 
 
删除插入的数据后:
 
结论:删除collection内的数据不会释放磁盘空间;
 
可以采用db.runCommand({closeAllDatabases:1}):
利用dbshell指令查看内存占用显示已释放;
linux shell查看内存还没释放
 
进入删除了数据的db,采用db.repairDatabase():
 
磁盘内存已经释放。
 
repairDatabase是官方文档中认为唯一可以回收硬盘空间的方法。
repairDatabase is the appropriate and the only way to reclaim disk space.
 
虽然可以用 db.repairDatabase()修复数据。但这种方法有两个不好的地方。1.在生产上操作如果意外停止可能会造成数据无法恢复的危险。2.如果磁盘空间不足,小于现在这个db时间占有的空间,这种情况是用不了 db.repairDatabase()的。
 
注意,repairDatabase操作所需要磁盘的空余空间为当前数据总量再加上2G。如果当前磁盘分区空间不足,可以尝试用 –repairpath 参数指定一个空间足够的分区路径。
 
试验在内存占用超过50%的情况下能否使用db.repairDatabase()命令释放占用的内存空间:
1.释放内存小于当前剩余内存的情况:
 
删除数据后:
 
执行db.repairDatabase()
 
结论:释放的内存小于当前剩余内存,释放成功。
2.释放的内存大于当前内存的情况:
 
删除数据后:
 
执行db.repairDatabase()
 
无法释放内存
 
 
另:
python操作mongo释放空间:
利用管道的方式将 db.repairDatabase() 命令写入mongo.
 
 
 
 
 
 
 
 
 

--------------------- 本文来自 四月的水 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/weixin_40238625/article/details/78992432?utm_source=copy

关于mongodb删除集合后磁盘空间不释放的问题的更多相关文章

  1. mongoDB 删除集合后,空间不释放

    mongoDB 删除集合后,空间不释放,添加新集合,没有重新利用之前删除集合所空出来的空间,也就是数据库大小只增不减. 方法有: 1.导出导入 dump & restore 2.修复数据库 r ...

  2. mongoDB 删除集合后,空间不释放的解决方法

    mongoDB 删除集合后,空间不释放,添加新集合,没有重新利用之前删除集合所空出来的空间,也就是数据库大小只增不减. 方法有: 1.导出导入 dump & restore 2.修复数据库 r ...

  3. MySQL删除数据后磁盘空间的释放情况【转】

    OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除 ...

  4. Mysql删除数据后磁盘空间未释放的解决办法【转】

    转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...

  5. linux删除文件后磁盘空间未释放的问题

    很可能是该文件还被其它进程使用. 使用: lsof | grep deleted | grep $FILE_NAME 可以看到正使用该文件的进程,将之kill即可.也可以查看进程来验证: ls -l ...

  6. mysql 正确清理binlog 删除数据后磁盘空间的

    (3条消息)MySQL删除数据后磁盘空间的释放情况 - ZERO - CSDN博客 https://blog.csdn.net/zero__007/article/details/51404091 m ...

  7. mysql优化, 删除数据后物理空间未释放(转载)

    mysql优化, 删除数据后物理空间未释放(转载) OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTI ...

  8. 关于mysql 删除数据后物理空间未释放(转载)

    转自 关于mysql 删除数据后物理空间未释放(转载) - NETDATA - 博客园http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908 ...

  9. 【Linux命令】删除大文件后磁盘空间未释放问题

    前言 工作中经常遇到Linux系统磁盘空间不足,但是删除后较大的日志文件后,发现磁盘空间仍没有被释放,有点摸不着头脑,今天博主带大家解决这个问题. 思路 1.工作发现磁盘空间不足: 2.找到占用磁盘空 ...

随机推荐

  1. TempData、ViewData和ViewBag异同

    Data ViewData ViewBag都可以用来保存数据. 它们之间的区别如下: TempData:保存在Session中,Controller每次执行请求的时候,会从Session中先获取Tem ...

  2. 利用Django中间件middleware解决用户未登录问题(转)

    add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middlewar ...

  3. filebeat 简介安装

    Filebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on ...

  4. 添加git忽略文件

    把之前的文件添加作为忽略文件 先把本地缓存删除(改变成未track状态),然后再提交git rm -r --cached .git add .git commit -m 'commit log inf ...

  5. mac截屏

    shift+command+3 : 截全屏 shift+command+4 : 出现十字架的坐标图标,画框截图

  6. zabbix-监控Linux服务器

    一.zabbix监控 1.关闭防火墙 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disabl ...

  7. JSP使用网站访问人数统计功能,方法与技巧

    实现网站访问人数统计功能的步骤: 创建静态登录页面,并指定表单提交由登录处理页面进行处理. 创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,把已登录用户的信息保存在一个 ...

  8. window.event.keycode值大全

    window.event.keycode值大全 event.keycode值大全 1 keycode 8 = BackSpace BackSpace 2 keycode 9 = Tab Tab 3 k ...

  9. 自己写的一个简单PHP采集器

    自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...

  10. 解释一下python中的成员运算符

    通过成员运算符‘in’ 和 ‘not in’,我们可以确认一个值是否是另一个值的成员 print('me' in 'disappointment')#True print('us' in 'disap ...