本站承诺永不接任何虚假欺骗、联盟广告、弹窗广告、病毒广告、诱导充值等影响用户体验的广告,广告屏蔽插件会影响本站部分功能,还请不要屏蔽本站广告,感谢支持!

当前位置:首页 / 正文

2020-08-21 | 编程技术 | 2709 次阅读 | 等你评论 | 0 次点赞 | 繁体

MongoDB3.6 以后,默认使用的储存引擎是 WiredTiger。这个引擎有一个特点,就是删除数据不释放空间。例如现在你的一个集合里面有 10000000 条数据,占用 10GB 的硬盘空间。你把其中的 9999999 条数据都删了,占用空间仍然是 10GB。

如果你想释放空间,最直接的方法是删除整个集合(Drop Collection)或者删除整个数据库(Drop Database)。

如果你的 MongoDB 版本小于 4.4,但是大于等于 3.6,那么虽然删除了数据,磁盘空间不会释放,但当你插入新的数据时,MongoDB
会重用之前占有的空间,而不会继续额外占用新的磁盘空间。

例如你的集合有 10GB,你删除了 9999999 条数据,接下来,在你新插入的数据总大小超过 10GB 前,MongoDB 都不会申请额外的硬盘空间。

我们可以在 Robo 3T 上,通过查看集合的统计信息找到当前集合可重复使用的空间大小。在集合上右键,选择 Statistics,从返回的统计数据中,展开 wiredTiger-block-manager-file bytes available for reuse。这里显示的数据就是当前集合可重用的空间大小。如下图所示。

Alt text

如果你的 MongoDB 允许暂停读写操作,那么还可以在 Robo 3T 或者 Mongo Shell 中使用 compact 命令来释放空间。命令格式为:

db.runCommand({'compact': '集合名'})

在 MongoDB 4.4 之前的版本,compact 会阻塞整个库的增删改查操作,所以需要暂停外部读写后才能执行。

在 MongoDB 4.4 或以后的版本,compact 命令几乎可以在除了删除集合、增删索引外的任何时候执行。

关于 compact 命令的更多说明,可以阅读 compact — MongoDB Manual[1]。

参考资料

[1] compact — MongoDB Manual:
https://docs.mongodb.com/manual/reference/command/compact/#dbcmd.compact

via:
https://mp.weixin.qq.com/s/9PbfaN9zn28LCswY3v86QQ

标签: 数据库数据MongoDB

猜你喜欢
如何定位Mysql中CPU占用高的查询语句
今天 mysql 服务器突然 CPU 告警,记录一下问题查找的过程第一步查看具体是哪个线程占用CPU最高1、在 Linux 中使用 top 命令找到 mysql 进程 PID2、指定进程 PID...
mysql8利用CTE特性实现递归查询
递归查询分为父子查询和子父查询。父子查询: 根据父 id 查询下面所有子节点数据;子父查询: 根据子 id 查询上面所有父节点数据;下边就利用 mysql8 新增语法实现递归查询,表结构及数...
Mysql 窗口函数学习
窗口函数是数据库查询中的一个经典场景,在解决某些特定问题时甚至是必须的。个人认为,在单纯的数据库查询语句层面【即不考虑 DML、SQL 调优、索引等进阶】,窗口函数可看作是考察求职者 SQL 功...
像程序员一样安装程序:Chocolatey 初见
每次拿到一台新的电脑,快速安装上所有自己需要的程序是一件非常非常耗时间的事情。 如果去国内各大第三方下载站,或者电脑管家、百度的安装工具,它们很多都会把原生的安装包进行修改,加入自己的广告或其他
三行代码捅穿 CloudFlare 的五秒盾
经常写爬虫的同学,肯定知道 CloudFlare 的五秒盾。当你没有使用正常的浏览器访问网站的时候,它会返回如下这段文字: ``` Checking your browser before acc
Excel 打开 CSV 文件乱码解决方法
经常接触数据的朋友,可能时不时会遇到这种情况,一份 CSV 或者 TXT 文件,使用 Excel 打开后就乱码了,但是使用文本方式(比如使用自带记事本)打开又是正常的,遇到这种情况怎么解决呢?
(首次提交评论需审核通过才会显示,请勿重复提交)