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

一、问题

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.mfbz.cn/a/570847.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

栈和队列详解

目录 栈栈的概念及结构栈的实现数组栈的实现数组栈功能的实现栈的初始化void STInit(ST* pst)初始化情况一初始化情况二 代码栈的插入void STPush(ST* pst, STDataType x)代码 栈的删除void STPop(ST* pst)代码 栈获取数据STDataType STTop(ST* pst)代码 判断栈是否为空bool ST…

裸金属服务器是什么

自推出裸金属服务器以来&#xff0c;它一直断断续续地出现在我们面前。最近&#xff0c;关于裸金属服务器、什么是裸金属服务器、裸金属服务器可以做什么、数据托架共享的讨论越来越多&#xff1a; 裸金属服务器&#xff08;bare metal server&#xff0c;BMS&#xff09;的官…

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

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

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动 {%- for article in blog.articles -%}<div class"blog-articles__article article">{%- render article-card,article: article,media_height: section.settings.image_height,media_aspect_ratio: a…

面试遇到算法题:实现LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。 这是一道大厂面试高频出现的算法题&#xff0c;难度为⭐️⭐️⭐️&#xff0c;属于中等&#xff0c;老铁们来一起看看这个题该怎么解&#xff1f; 1. 原题再现 没有废话&#xff0c;翠花&#xff0c;上酸菜&…

CountDownLatch使用错误+未最终断开连接导致线程池资源耗尽

错误描述&#xff1a; 我设置了CountDownLatch对线程的协作做出了一些限制&#xff0c;但是我发现运行一段时间以后便发现定时任务不运行了。 具体代码&#xff1a; public void sendToCertainWeb() throws IOException, InterruptedException {List<String> urlList …

HTML的学习-通过创建相册WEB学习HTML-第二部分

文章目录 二、学习开始3.6、form元素示例&#xff1a;添加form元素示例&#xff1a;action属性添加到form属性中 3.7、input元素示例&#xff1a;在input属性中添加参数 3.8、button元素示例&#xff1a;在button中添加type元素示例&#xff1a;定义单选按钮radio 3.9、id属性示…

交换式网络捕获网络流量的方法

交换式网络捕获网络流量的方法 参考资料&#xff1a; https://blog.csdn.net/weixin_44143678/article/details/107559329 # 一.端口镜像 端口镜像&#xff0c;又称为“端口监视”或“端口抄送”&#xff0c;是一种网络管理技术&#xff0c;旨在将网络设备上的特定端口的流…

伙伴匹配(后端)-- 数据库表设计

文章目录 用户表标签表队伍表用户队伍表sql语言分类&#xff08;题外话&#xff09;待更新... 在后端开发中&#xff0c;数据库表设计真的是非常重要的一环了&#xff0c;进入公司熟悉业务第一个要看的也是数据库的表,接下来就让我们看看本项目的数据库表有哪些吧&#xff08;暂…

LoRA: 大模型的低秩适配

笔记整理&#xff1a;陈一林&#xff0c;东南大学硕士&#xff0c;研究方向为不确定知识图谱规则学习 链接&#xff1a;https://arxiv.org/abs/2106.09685 1、动机 自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练&#xff0c;然后对特定任务或领域进行适应性…

Go语言中通过数据对齐降低内存消耗和提升性能

数据对齐是一种安排数据分配方式以加速 CPU 访问内存的方法。 不了解这个概念会导致额外的内存消耗甚至性能下降。 要了解数据对齐的工作原理&#xff0c;让我们首先讨论没有它会发生什么。假设我们分配两个变量&#xff0c;一个 int32 类型的 &#xff08;32 B&#xff09; 和…

【上海大学计算机组成原理实验报告】四、指令系统实验

一、实验目的 了解指令结构、PC寄存器的功能和指令系统的基本工作原理。 学习设计指令的方法。 二、实验原理 根据实验指导书的相关内容&#xff0c;对于部分使用频率很高&#xff0c;且只用几条微指令即可完成的简单操作&#xff0c;可以把这部分简单操作的微指令序列固定下…

安装esxi 7 对硬件资源的需求

安装VMware vSphere ESXi 7.0 虚拟化平台对硬件资源的基本需求如下&#xff1a; 处理器&#xff1a; 必须是64位x86架构的CPU。至少需要两个物理核心&#xff08;不过对于生产环境&#xff0c;建议更多的核心数以支持更多虚拟机并保证性能&#xff09;。支持并启用硬件辅助虚拟…

SpringMvc(2)RequestMapping注解

RequestMapping注解 1 、RequestMapping的作用2、RequestMapping的出现位置3、类上与方法上结合使用4、RequestMapping注解的value属性4.1 value属性的使用4.2 Ant风格的value4.3 value中的占位符&#xff08;重点&#xff09; 5、RequestMapping注解的method属性5.2衍生Mappin…

k8s集群CD工具-ArgoCD

ArgoCD是什么 Argo CD 是 Kubernetes 的声明式 GitOps 持续交付工具。应用程序定义、配置和环境应该是声明性的和版本控制的。应用程序部署和生命周期管理应该是自动化的、可审计的且易于理解。 官方文档 CD工作流&#xff08;无ArgoCD&#xff09; 假设有一个微服务应用程序…

<计算机网络自顶向下>

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

AI-数学-高中-40法向量求法

原作者视频&#xff1a;【空间向量】【考点精华】3法向量求法稳固&#xff08;基础&#xff09;_哔哩哔哩_bilibili 注意&#xff1a;法向量对长度没有限制&#xff0c;求法向量时&#xff0c;可以假设法向量z为任意一个取非0的值。 示例1&#xff1a; 示例2&#xff1a;

Transformer - 特征预处理

Transformer - 特征预处理 flyfish 原始数据 train_data.values [[ 5.827 2.009 1.599 0.462 4.203 1.34 30.531][ 5.76 2.076 1.492 0.426 4.264 1.401 30.46 ][ 5.76 1.942 1.492 0.391 4.234 1.31 30.038][ 5.76 1.942 1.492 0.426 4.234 1.31…

AndroidStudio中虚拟机(AVD)无法启动,出现unable to locate adb错误

1.检查Android SDK Platform-Tools是否安装(个人是通过这个方法解决的) 首先通过File-Project Structure-Project SDK检查SDK有没有被选中 步骤&#xff1a;打开file -> settings &#xff0c;搜索SDK 之后点击"-",在点击Apply进行安装 2.可能是驱动的问题 电脑…

牛客NC179 长度为 K 的重复字符子串【simple 哈希,滑动窗口 C++、Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/eced9a8a4b6c42b79c95ae5625e1d5fd 思路 哈希统计每个字符出现的次数。没在窗口内的字符要删除参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c…
最新文章