一日一技:单机单节点 MongoDB 为什么删除数据后不释放空间?

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 一日一技:单机单节点 MongoDB 为什么删除数据后不释放空间?

摄影:产品经理阳春面

MongoDB 3.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。这里显示的数据就是当前集合可重用的空间大小。如下图所示。

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

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

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

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

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

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
NoSQL MongoDB 数据库
MongoDB 删除数据库
10月更文挑战第13天
63 0
|
8月前
|
NoSQL 测试技术 定位技术
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
【5月更文挑战第10天】MongoDB 支持地理空间数据处理,提供2dsphere(球面)和2d(平面)索引,适用于地图导航、物流、社交网络等领域。通过创建索引,可加速位置查询,如查询范围、最近邻及地理空间聚合。案例包括地图应用、物流追踪和社交网络。注意数据准确性、索引优化和性能测试,以发挥其在地理空间处理中的潜力。学习此功能,为应用开发解锁更多可能性!
298 2
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
|
7月前
|
NoSQL JavaScript 安全
精心操作MongoDB:删除数据库的关键步骤和重要事项
精心操作MongoDB:删除数据库的关键步骤和重要事项
204 0
|
8月前
|
NoSQL JavaScript Linux
【MongoDB系列相关笔记】单机部署
本文主要介绍了Windows和Linux系统中安装和启动MongoDB的步骤。
179 0
|
8月前
|
存储 NoSQL Linux
|
NoSQL MongoDB 数据库
MongoDB 删除数据库
MongoDB 删除数据库
529 0
|
存储 SQL NoSQL
Centos7安装单机版MongoDB
Centos7安装单机版MongoDB
192 0
|
NoSQL MongoDB 数据库
开心档-软件开发入门之MongoDB 删除数据库
【摘要】 本章将会讲解删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
|
NoSQL MongoDB 数据库
一日一技:如何找到 MongoDB 占用空间最大的集合?
一日一技:如何找到 MongoDB 占用空间最大的集合?
310 0
|
缓存 NoSQL 安全
mongodb复制集windows server部署,以及将线上单节点转化成复制集所踩的坑
安装完成后我们需要启动三个mongod的服务来做为复制集的三个节点,我们可以直接打开cmd,使用mongod来根据不同的配置启动服务。例如:参考如下四张图,由于我安装的磁盘足够存放mongodb的数据,所以我将数据放在data文件中,三个节点的配置文件放在config文件中,三个节点mongod的服务日志放在log中。
238 0
mongodb复制集windows server部署,以及将线上单节点转化成复制集所踩的坑