MongoDB磁盘空间占满,导致数据库被锁定,如何清理数据和磁盘空间

news2024/11/18 19:27:09

一、问题

1、我在实际项目中,遇到一个问题,随着数据每天的不断增加,导致mongodb的磁盘空间站满了,数据库被锁了,无法使用。
2、故障表现
  • 部署的应用程序突然无法将数据写入数据库,但是可以正常读取数据。

  • 管理人员通过客户端连接数据库进行排查时,可以写入一条数据,返回错误信息:not authorized on xxxx to execute command

3、检查磁盘空间是否被耗尽

登录mongodb管理控制台,查看实例的状态,会发现已被锁定,并且磁盘空间占用已经100%

优化之前数据和磁盘情况:

二、解决方案

1、两种方案:

(1)通过变更配置方案,扩充磁盘空间,来提升实例的磁盘空间

(2)删除数据库中的数据,回收磁盘碎片以提升磁盘利用率,来减少数据存储空间,降低磁盘占用空间

我选择了第二种方案,因为我的数据库中,有很多非必要的数据可以删除,可以腾出不少磁盘空间。

2、注意问题

这里一定要注意,并不是在MongoDB实例数据库中删除数据,就能够释放MongoDB实例的磁盘空间。在删除云数据库MongoDB实例的数据后,这些被删除数据使用的存储空间会被标记为空闲,随后写入的新数据可能会被直接存储到这部分空闲的存储空间中,也可能会先扩展文件的存储空间再存储到文件末尾。上述情况将导致一部分空闲的存储空间不会被使用,这些未被使用的空闲存储空间被称之为磁盘碎片,磁盘碎片越多,磁盘利用率就越低。

3、背景信息

(1)执行db.runCommand({collStats: <collection_name>}) 命令访问节点时,返回结果有两个关键字:sizestorageSize。其中,size表示集合的逻辑存储大小,storageSize表示集合的物理存储大小。在执行remove命令删除文档后,size的值会减少,但是,storageSize的值不一定会减少。当storageSize大于size时,表示已产生磁盘碎片。

(2)compact是云数据库MongoDB的压缩命令,执行compact命令可以回收删除数据后产生的磁盘碎片,实现压缩磁盘空间的目的,从而提升磁盘利用率。

4、删除数据库数据

这里以表valueOpenData为例子,针对主节点,进行演示操作,之前已经清理了一部分表的磁盘空间,现已经不是100%。

删除数据,是不会减少磁盘空间的,这个一定要注意。

执行删除方案,删除某一段时间之前的数据:

db.valveOpenData.deleteMany({  
    "dataReadTime": {    
        "$lte": ISODate("2022-12-30T23:59:59Z")  
    }  
})
5、查看集合需回收的磁盘碎片空间

删除数据 清理磁盘之前的总磁盘占用情况

删除数据清理磁盘之前的磁盘占用空间

删除数据清理磁盘之前的数据库情况

执行查看集合需回收的磁盘碎片空间语句

db.valveOpenData.stats().wiredTiger["block-manager"]["file bytes available for reuse"]

结果:可清理磁盘碎片 9161187328 byte

6、回收单节点或副本集实例的磁盘碎片 


单节点实例只有一个StandAlone节点,您只需要连接主节点(Primary节点),执行compact命令回收主节点(Primary节点)的磁盘碎片。

副本集实例具有多个节点,您需要分别连接主节点(Primary节点)和从节点(Secondary节点),在不同节点上执行compact命令回收相应节点的磁盘碎片,执行的回收命令相同。

我这里回收的是主节点(Primary节点)磁盘碎片。

执行语句

db.runCommand({compact:"valveOpenData"})

强制执行语句

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

执行成功的返回结果如下:{ "ok" : 1 }  ,清理磁盘空间完成,你也可以多执行几次清理

执行查看集合需回收的磁盘碎片空间语句

db.valveOpenData.stats().wiredTiger["block-manager"]["file bytes available for reuse"]

结果:清理过后磁盘碎片 1072041984 byte

删除数据清理磁盘之后的总磁盘占用情况

删除数据清理磁盘之后的磁盘占用空间

删除数据清理磁盘之后的数据库情况

最终结果:一个表删除数据、清理磁盘,清理出来差不多10G的磁盘空间

三、总结

对于不重要的数据,为了防止数据量过大,占满磁盘空间,需要定时清理过期或者不需要的数据。
最好写个定时器定时删除数据比较合适,但是要记得执行回收磁盘碎片空间,只有执行了回收后,才是真正回收了磁盘空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1621060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在OpenWRT上配置SFTP远程文件传输

如何在OpenWRT上配置SFTP远程文件传输 OpenWRT 是一款广泛使用的开源路由器固件&#xff0c;它能够让普通的家用路由器具备高级路由功能&#xff0c;提供更多自定义和优化选项。本文将介绍如何在OpenWRT上配置SFTP&#xff08;SSH文件传输协议&#xff09;服务&#xff0c;以便…

SpringBoot内容协商机制(就是接受数据的类型如json,xml)

目录 一、基于请求头的内容协商机制 二、基于请求参数的内容协商机制 一、基于请求头的内容协商机制 如果我们的Java服务为浏览器和安卓手机同时提供服务&#xff0c;浏览器期望接受的请求是JSON格式&#xff0c;安卓客户端期望接收的请求是XML格式&#xff0c;这个时候是否需…

CentOS-7安装clickhouse并允许其他主机登录

一、通用设置 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服务器之间时间同步 yum install -y ntpdate &…

互联网和嵌入式,哪个更吃香?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;显然&#xff0c;互联网更受青…

Vue3+Echarts: 浏览器缩小后,图表内容发生重叠

一、问题 Vue3Echarts项目&#xff1a;浏览器缩小后&#xff0c;图表内容发生重叠。本文将提供几个解决上述问题的思路&#xff0c;后续有新的解决思路将在此处进行补充。 二、解决思路 1、动态调整ECharts配置 如果图表容器的尺寸没有随着浏览器窗口的缩小而进行相应地调整…

<计算机网络自顶向下> 无连接传输UDP

UDP&#xff1a;User Datagram Protocol “尽力而为”的服务 报文可能丢掉或者乱序好处&#xff1a; 效率高&#xff08;不建立连接无拥塞控制和流量控制【应用->传输的速率主机->网络的速率】&#xff09;报文段的头部很小&#xff08;开销小&#xff09;UDP被用于 流媒…

政安晨:【Keras机器学习示例演绎】(七)—— 利用 NeRF 进行 3D 体积渲染

目录 简介 设置 下载并加载数据 NeRF 模型 训练 可视化训练步骤 推理 渲染三维场景 可视化视频 结论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0…

图像预处理工具_CogPolarUnwrapTool

CogPolarUnwrapTool CogPolarUnwrapTool 工具能够将环形区域通过极坐标变换 转换为矩形区域&#xff0c;方便读取 转换的步骤&#xff1a; 1.根据环形到矩形的映射来构建一个转换关系。 2.根据这个转换关系将输出图像中的像素点映射到输入图像。 3.对输入图像中的点像素进行…

浅析未来:深度学习的挑战与机遇

浅析未来&#xff1a;深度学习的挑战与机遇 1 引言 在过去的十年里&#xff0c;深度学习已经从一个相对边缘的研究领域发展成为计算机科学和人工智能中最为活跃和引人注目的领域之一。无论是在图像识别、自然语言处理、还是在更为复杂的决策制定任务中&#xff0c;深度学习技术…

索引!索引!!索引!!!到底什么是索引?

文章目录 索引的概述索引的优劣势优势劣势 索引的分类实现索引的数据结构B 树&#xff08;B-Tree&#xff09;B树&#xff08;B Tree&#xff09;哈希索引&#xff08;Hash Index&#xff09; 前言&#xff1a; 相信接触过编程的同学都听说过 索引&#xff0c;那么到底什么是索…

第六讲-流程挖掘(Process Mining)学习日志之α算法精讲

第六讲-流程挖掘&#xff08;Process Mining&#xff09;学习日志之α算法精讲 通过给定一个简单的事件日志&#xff0c;α算法可以得到一个(希望)能够重演日志的 Petri 网。同时α算法是最早的能够适当处理并发的过程发现算法之一。 参考&#xff1a;PROCESS MINING&#xff1…

【电子元件】常用的二极管、极管规格参数一览表

目录 1. 常用的二极管规格参数1.1 贴片二极管1.2 直插二极管 2. 常用的三极管规格参数2.1 贴片三极管2.2 直插三极管 参考资料 1. 常用的二极管规格参数 1.1 贴片二极管 型号/封装丝印正向压降(Vf) 反向击穿电压(Vr)平均整流电流(Io)/正向工作电流(If)反向电流(Ir)反向恢复时间…

YOLOv9训练损失、精度、mAP绘图功能 | 支持多结果对比,多结果绘在一个图片(消融实验、科研必备)

一、本文介绍 本文给大家带来的是YOLOv9系列的绘图功能&#xff0c;我将向大家介绍YOLO系列的绘图功能。我们在进行实验时&#xff0c;经常需要比较多个结果&#xff0c;针对这一问题&#xff0c;我写了点代码来解决这个问题&#xff0c;它可以根据训练结果绘制损失(loss)和mA…

怎样用PHP语言实现远程控制三路开关

怎样用PHP语言实现远程控制三路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制三路开关&#xff0c;三路开关可控制三路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

园区智慧化转型新篇章:解码智慧技术如何助力园区实现精细化管理,提升运营效率

目录 一、智慧技术概述及其在园区管理中的应用 &#xff08;一&#xff09;物联网技术的应用 &#xff08;二&#xff09;大数据技术的应用 &#xff08;三&#xff09;云计算技术的应用 二、智慧技术助力园区实现精细化管理 &#xff08;一&#xff09;实现资源优化配置…

虚拟主机 克隆机 域名解析

以下情况的处理&#xff1a; [rootlocalhost ~]# yum repolist Loaded plugins: fastestmirror, langpacks Existing lock /var/run/yum.pid: another copy is running as pid 2729. Another app is currently holding the yum lock; waiting for it to exit… The other appli…

<计算机网络自顶向下>

在计算机网络中&#xff0c;网络层包括数据平面和控制平面&#xff0c;它们分别负责网络数据转发和网络路由控制。以下是它们之间的区别&#xff1a; 数据平面&#xff08;Data Plane&#xff09;&#xff1a; 数据平面负责实际的数据传输和转发&#xff0c;它处理网络中的数据…

1593. 拆分字符串使唯一子字符串的数目最大

1593. 拆分字符串使唯一子字符串的数目最大 Java: class Solution {int cnt;int max;Set<String> set;private void dfs(String s, int pos, int len) {if (pos len) {max Math.max(max, cnt);return;}for(int i pos; i < len; i) {String s1 s.substring(pos, i…

制作一个RISC-V的操作系统十三-抢占式多任务和兼容协作式多任务

文章目录 强占式多任务流程代码具体流程兼容协作式多任务&#xff08;软中断&#xff09;寄存器 msip流程代码结果 强占式多任务 流程 抢占式多任务由计时器中断触发&#xff0c;最后在处理程序中切换到下一个进程 代码具体流程 上下文中增加pc寄存器 寄存器保留上下文和切…

npm、yarn与pnpm详解

&#x1f525; npm、yarn与pnpm详解 &#x1f516; 一、npm &#x1f50d; 简介&#xff1a; npm是随Node.js一起安装的官方包管理工具&#xff0c;它为开发者搭建了一个庞大的资源库&#xff0c;允许他们在这个平台上搜索、安装和管理项目所必需的各种代码库或模块。 &#…