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;

相关推荐
_3762715321 小时前
怎样查询不同表的字段差异 information_schema结构对比
jvm·数据库·python
YL2004042621 小时前
MySQL-进阶篇-存储引擎
数据库·mysql
weixin_4440129321 小时前
宝塔面板如何实现网站重定向_配置301永久跳转与域名更换
jvm·数据库·python
m0_7335654621 小时前
CSS如何高效命名样式类_掌握BEM规范提升语义化程度
jvm·数据库·python
lzh2004091921 小时前
MySQL零基础入门:从建库到增删改查
数据库·mysql
woxihuan12345621 小时前
CSS如何引入自适应图标_利用svg外链配合css控制颜色
jvm·数据库·python
2401_8800714021 小时前
如何正确合并多个 Word 文档(.docx)并保留格式与分页
jvm·数据库·python
瀚高PG实验室21 小时前
瀚高数据库V45及V6用户锁定后解锁步骤
运维·数据库·瀚高数据库
wang3zc21 小时前
MySQL行锁升级为表锁的原因是什么_分析非索引字段查询影响
jvm·数据库·python
2403_8832610921 小时前
CSS如何制作简单的加载转圈动画_使用keyframe与animation
jvm·数据库·python