mongodb如何删除数据并释放空间

mongodb删除数据后不会直接释放内存空间,是因为使用了一种称为"延迟删除"的策略。这意味着当一个文档被删除时,它仍然会占用一定的内存空间,直到这个空间被垃圾回收器(Garbage Collector)回收。

删除数据操作前建议先评估你的操作会有什么样的影响。在生产上操作的时候,需要评估你删除的数据有多大,需要用多长时间,从而可以制定相应的实施和回退方案。

举个例子,db是busi,我要删除createDate小于2023-07-01的数据,根据这个字段查询数据量大概有多少,或者可以根据主键_id来查询。

-- 查询数据

db.busi.find({createDate:{$gt : '2023-07-01'}}).count();

db.busi.find({_id:{$gt: 123456}}).count()

db.busi.find({_id:{$lt: 123456}}).count()

如果符合预期的操作方案,则进行后面的删除;

注意:删除数据只能在主节点进行操作

-- 根据日期删除数据(时间较长)

db.busi.remove({createDate:{$gt : '2023-07-01'}})

删除过程中也可以直接查询当前的数据量

-- 根据条件查询当前的数据总量

db.busi.find({_id: {$gt: 123456}}).count();

db.busi.find({_id: {$lt: 123456}}).count();

-- 该语句执行较长

db.busi.find({createDate: {$lt: '2023-07-01'}}).count();

删除完成后,我们可以观察服务器对应的数据目录,磁盘空间是没有任何变化的,则需要执行下面的命令

注意:释放空间只是释放了当前节点的空间,如果有多个节点,还需要在多个节点进行操作

-- 释放空间(需要几分钟)

db.runCommand({compact: "busi", force:true});

-- 实时查询当前空间大小

db.busi.stats().storageSize;

相关推荐
Lao A(zhou liang)的菜园44 分钟前
作为DBA,如何快速处理Oracle连接类故障?
数据库·oracle·dba
效能革命笔记1 小时前
Gitee Team:以数据驱动与精细化管理,支撑关键领域 DevSecOps 落地
数据库·gitee
Gauss松鼠会1 小时前
GaussDB(DWS) SQL性能问题案例集
java·数据库·经验分享·spring boot·后端·sql·gaussdb
六月雨滴1 小时前
Oracle Data Guard 完全解析及与 RMAN 的核心区别
数据库·oracle·dba
程序猿乐锅1 小时前
【MySQL | 第二篇】: 函数、约束、多表查询和事务
android·数据库·mysql
treesforest1 小时前
如何查IP归属地?IP地址归属地查询的三种方式与选型指南
网络·数据库·网络协议·tcp/ip
NiceCloud喜云1 小时前
Anthropic 发布 Project Glasswing:未公开模型 Mythos 已挖出 10000+ 漏洞,含 OpenBSD 27 年老 bug
android·java·数据库·c++·python·docker·bug
雷工笔记1 小时前
SQL系列1:AI排查SQL语句中的幽灵
数据库·sql
Cosolar1 小时前
Milvus向量数据库学习手册
数据库·学习·架构·milvus
这个DBA有点耶1 小时前
SQL语义执行:当数据库开始“理解”你的查询意图
数据库·sql·自然语言处理·创业创新·dba·程序员创富·改行学it